Move argp_program_version_hook and argp_program_bug_address variables
authorUlrich Drepper <drepper@myware66.akkadia.org>
Sat, 17 Jan 2009 19:47:10 +0000 (11:47 -0800)
committerUlrich Drepper <drepper@myware66.akkadia.org>
Sat, 17 Jan 2009 19:47:10 +0000 (11:47 -0800)
in all programs into the .rodata section.

17 files changed:
lib/ChangeLog
lib/system.h
src/ChangeLog
src/addr2line.c
src/ar.c
src/elfcmp.c
src/elflint.c
src/findtextrel.c
src/ld.c
src/nm.c
src/objdump.c
src/ranlib.c
src/readelf.c
src/size.c
src/strings.c
src/strip.c
src/unstrip.c

index 8791640..0774524 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-17  Ulrich Drepper  <drepper@redhat.com>
+
+       * system.h (ARGP_PROGRAM_VERSION_HOOK_DEF): Define.
+       (ARGP_PROGRAM_BUG_ADDRESS_DEF): Define.
+
 2009-01-10  Ulrich Drepper  <drepper@redhat.com>
 
        * eu-config.h: Remove tls_key_t, key_create, getspecific, setspecific,
index 23c666a..10b4734 100644 (file)
@@ -1,5 +1,5 @@
 /* Declarations for common convenience functions.
-   Copyright (C) 2006 Red Hat, Inc.
+   Copyright (C) 2006, 2009 Red Hat, Inc.
    This file is part of Red Hat elfutils.
 
    Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -78,4 +78,16 @@ extern int crc32_file (int fd, uint32_t *resp);
 #define pread_retry(fd, buf,  len, off) \
   TEMP_FAILURE_RETRY (pread (fd, buf, len, off))
 
+
+/* We need define two variables, argp_program_version_hook and
+   argp_program_bug_address, in all programs.  argp.h declares these
+   variables as non-const (which is correct in general).  But we can
+   do better, it is not going to change.  So we want to move them into
+   the .rodata section.  Define macros to do the trick.  */
+#define ARGP_PROGRAM_VERSION_HOOK_DEF \
+  void (*const apvh) (FILE *, struct argp_state *) \
+   __asm ("argp_program_version_hook")
+#define ARGP_PROGRAM_BUG_ADDRESS_DEF \
+  const char *const apba__ __asm ("argp_program_bug_address")
+
 #endif /* system.h */
index 4a9b631..97fd449 100644 (file)
@@ -1,3 +1,21 @@
+2009-01-17  Ulrich Drepper  <drepper@redhat.com>
+
+       * addr2line.c: Use ARGP_PROGRAM_VERSION_HOOK_DEF and
+       ARGP_PROGRAM_BUG_ADDRESS_DEF.
+       * ar.c: Likewise.
+       * elfcmp.c: Likewise.
+       * elflint.c: Likewise.
+       * findtextrel.c: Likewise.
+       * ld.c: Likewise.
+       * nm.c: Likewise.
+       * objdump.c: Likewise.
+       * ranlib.c: Likewise.
+       * readelf.c: Likewise.
+       * size.c: Likewise.
+       * strings.c: Likewise.
+       * strip.c: Likewise.
+       * unstrip.c: Likewise.
+
 2009-01-16  Ulrich Drepper  <drepper@redhat.com>
 
        * elflint.c (check_program_header): Check that PT_GNU_EH_FRAME entry
index 7141e26..5a7b045 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
+#include <system.h>
+
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Values for the parameters which have no short form.  */
index 961db24..a7a1232 100644 (file)
--- a/src/ar.c
+++ b/src/ar.c
@@ -55,7 +55,8 @@
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+
 /* Prototypes for local functions.  */
 static int do_oper_extract (int oper, const char *arfname, char **argv,
                            int argc, long int instance);
@@ -66,7 +67,7 @@ static int do_oper_insert (int oper, const char *arfname, char **argv,
 
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Definitions of arguments for argp functions.  */
index 8903efb..a159636 100644 (file)
@@ -41,6 +41,7 @@
 #include <string.h>
 #include <unistd.h>
 
+#include <system.h>
 #include "../libelf/elf-knowledge.h"
 #include "../libebl/libeblP.h"
 
@@ -53,10 +54,10 @@ static  int regioncompare (const void *p1, const void *p2);
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Values for the parameters which have no short form.  */
 #define OPT_GAPS               0x100
index 35368a5..1c508c4 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 #define ARGP_strict    300
 #define ARGP_gnuld     301
@@ -67,7 +67,6 @@ const char *argp_program_bug_address = PACKAGE_BUGREPORT;
 /* Definitions of arguments for argp functions.  */
 static const struct argp_option options[] =
 {
-
   { "strict", ARGP_strict, NULL, 0,
     N_("Be extremely strict, flag level 2 features."), 0 },
   { "quiet", 'q', NULL, 0, N_("Do not print anything if successful"), 0 },
index 2fd99c9..9d10982 100644 (file)
@@ -44,6 +44,8 @@
 #include <string.h>
 #include <unistd.h>
 
+#include <system.h>
+
 
 struct segments
 {
@@ -54,10 +56,10 @@ struct segments
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Values for the parameters which have no short form.  */
 #define OPT_DEBUGINFO 0x100
index b4cc6cc..989bfab 100644 (file)
--- a/src/ld.c
+++ b/src/ld.c
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Values for the various options.  */
index 8b8f547..8833948 100644 (file)
--- a/src/nm.c
+++ b/src/nm.c
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Values for the parameters which have no short form.  */
index 55d3ae2..7f63941 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Definitions of arguments for argp functions.  */
index f456b99..e92dc89 100644 (file)
@@ -58,10 +58,10 @@ static int handle_file (const char *fname);
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Definitions of arguments for argp functions.  */
index 5d74cb5..a3223eb 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Definitions of arguments for argp functions.  */
 static const struct argp_option options[] =
index 9f59cce..f6f23d5 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Values for the parameters which have no short form.  */
index aebf07b..b69f2ad 100644 (file)
@@ -59,10 +59,10 @@ static int read_elf (Elf *elf, int fd, const char *fname, off64_t fdlen);
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Definitions of arguments for argp functions.  */
 static const struct argp_option options[] =
index 3ca047a..1958bb5 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 
 /* Values for the parameters which have no short form.  */
index 4a6fd19..97b73c6 100644 (file)
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
-void (*argp_program_version_hook) (FILE *, struct argp_state *)
-  = print_version;
+ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
 
 /* Bug report address.  */
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
 
 /* Definitions of arguments for argp functions.  */
 static const struct argp_option options[] =