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