On Tue, 2007-01-23 at 12:47 -0600, Adam Litke wrote:
> Here ye' here ye'
Get your S-o-b lines here!

Signed-off-by: Adam Litke <[EMAIL PROTECTED]>

> diff --git a/elflink.c b/elflink.c
> index 6b260c9..6316563 100644
> --- a/elflink.c
> +++ b/elflink.c
> @@ -464,6 +464,32 @@ static int find_numsyms(Elf_Sym *symtab,
>       return ((void *)strtab - (void *)symtab) / sizeof(Elf_Sym);
>  }
> 
> +/*
> + * To reduce the size of the extra copy window, we can eliminate certain
> + * symbols based on information in the dynamic section.  The following
> + * characteristics apply to symbols which may require copying:
> + * - Within the BSS
> + * - Global or Weak binding
> + * - Object type (variable)
> + * - Non-zero size (zero size means the symbol is just a marker with no data)
> + */
> +static inline int keep_symbol(Elf_Sym *s, void *start, void *end)
> +{
> +     if ((void *)s->st_value < start)
> +             return 0;
> +     if ((void *)s->st_value > end)
> +             return 0;
> +     if ((ELF_ST_BIND(s->st_info) != STB_GLOBAL) &&
> +         (ELF_ST_BIND(s->st_info) != STB_WEAK))
> +             return 0;
> +     if (ELF_ST_TYPE(s->st_info) != STT_OBJECT)
> +             return 0;
> +     if (s->st_size == 0)
> +             return 0;
> +
> +     return 1;
> +}
> +
>  /*
>   * Subtle:  Since libhugetlbfs depends on glibc, we allow it
>   * it to be loaded before us.  As part of its init functions, it
> @@ -510,22 +536,8 @@ static void get_extracopy(struct seg_inf
>       start = end_orig;
>       end = start_orig;
> 
> -     /*
> -      * To reduce the size of the extra copy window, we can eliminate certain
> -      * symbols based on information in the dynamic section.  The following
> -      * characteristics apply to symbols which may require copying:
> -      * - Within the BSS
> -      * - Global scope
> -      * - Object type (variable)
> -      * - Non-zero size (zero size means the symbol is just a marker with no
> -      *   data)
> -      */
>       for (sym = symtab; sym < symtab + numsyms; sym++) {
> -             if (((void *)sym->st_value < start_orig) ||
> -                     ((void *)sym->st_value > end_orig) ||
> -                     (ELF_ST_BIND(sym->st_info) != STB_GLOBAL) ||
> -                     (ELF_ST_TYPE(sym->st_info) != STT_OBJECT) ||
> -                     (sym->st_size == 0))
> +             if (!keep_symbol(sym, start_orig, end_orig))
>                       continue;
>               /* TODO - add filtering so that we only look at symbols from 
> glibc
>                  (@@GLIBC_*) */
> 
> 
> 
> --
> Adam Litke - (agl at us.ibm.com)
> IBM Linux Technology Center
> 
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Libhugetlbfs-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel
> 
> 
-- 
Adam Litke - (agl at us.ibm.com)
IBM Linux Technology Center


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Libhugetlbfs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to