/* Create new section, which is member of a group, in output file. Copyright (C) 2002 Red Hat, Inc. Written by Ulrich Drepper <drepper@redhat.com>, 2002. This program is Open Source software; you can redistribute it and/or modify it under the terms of the Open Software License version 1.0 as published by the Open Source Initiative. You should have received a copy of the Open Software License along with this program; if not, you may obtain a copy of the Open Software License version 1.0 from http://www.opensource.org/licenses/osl.php or by writing the Open Source Initiative c/o Lawrence Rosen, Esq., 3001 King Ranch Road, Ukiah, CA 95482. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include "libasmP.h" AsmScn_t * asm_newscn_ingrp (ctx, scnname, type, flags, grp) AsmCtx_t *ctx; const char *scnname; GElf_Word type; GElf_Xword flags; AsmScnGrp_t *grp; { AsmScn_t *result = __asm_newscn_internal (ctx, scnname, type, flags); if (likely (result != NULL)) { /* We managed to create a section group. Add it to the section group. */ if (grp->nmembers == 0) { assert (grp->members == NULL); grp->members = result->data.main.next_in_group = result; } else { result->data.main.next_in_group = grp->members->data.main.next_in_group; grp->members = grp->members->data.main.next_in_group = result; } ++grp->nmembers; /* Set the SHF_GROUP flag. */ if (likely (! ctx->textp)) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (result->data.main.scn, &shdr_mem); assert (shdr != NULL); shdr->sh_flags |= SHF_GROUP; (void) gelf_update_shdr (result->data.main.scn, shdr); } } return result; }