[PATCH] Move nested functions in backends to file scope.
by Chih-Hung Hsieh
* backends/aarch64_regs.c and backends/ia64_retval.c
should now compile with clang.
Signed-off-by: Chih-Hung Hsieh
---
backends/ChangeLog | 6 ++++++
backends/aarch64_regs.c | 38 ++++++++++++++++++++++----------------
backends/ia64_retval.c | 20 +++++++++++---------
3 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/backends/ChangeLog b/backends/ChangeLog
index 6ea3dc4..7f0d1c0 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-21 Chih-Hung Hsieh <chh(a)google.com>
+
+ * ia64_retval.c (hfa_type): Move nested function 'hfa' to file scope.
+ * aarch64_regs.c (aarch64_register_info): Move nested function 'regtype'
+ to file scope.
+
2015-10-16 Mark Wielaard <mjw(a)redhat.com>
* ppc_symbol.c (ppc_check_special_symbol): Also allow _SDA_BASE_
diff --git a/backends/aarch64_regs.c b/backends/aarch64_regs.c
index 7a8a678..23014bf 100644
--- a/backends/aarch64_regs.c
+++ b/backends/aarch64_regs.c
@@ -38,6 +38,25 @@
#define BACKEND aarch64_
#include "libebl_CPU.h"
+__attribute__ ((format (printf, 7, 8)))
+static ssize_t
+do_regtype (const char *setname, int type,
+ const char **setnamep, int *typep,
+ char *name, size_t namelen, const char *fmt, ...)
+{
+ *setnamep = setname;
+ *typep = type;
+
+ va_list ap;
+ va_start (ap, fmt);
+ int s = vsnprintf (name, namelen, fmt, ap);
+ va_end(ap);
+
+ if (s < 0 || (unsigned) s >= namelen)
+ return -1;
+ return s + 1;
+}
+
ssize_t
aarch64_register_info (Ebl *ebl __attribute__ ((unused)),
int regno, char *name, size_t namelen,
@@ -47,26 +66,13 @@ aarch64_register_info (Ebl *ebl __attribute__ ((unused)),
if (name == NULL)
return 128;
- __attribute__ ((format (printf, 3, 4)))
- ssize_t
- regtype (const char *setname, int type, const char *fmt, ...)
- {
- *setnamep = setname;
- *typep = type;
-
- va_list ap;
- va_start (ap, fmt);
- int s = vsnprintf (name, namelen, fmt, ap);
- va_end(ap);
-
- if (s < 0 || (unsigned) s >= namelen)
- return -1;
- return s + 1;
- }
*prefix = "";
*bits = 64;
+#define regtype(setname, type, ...) \
+ do_regtype(setname, type, setnamep, typep, name, namelen, __VA_ARGS__)
+
switch (regno)
{
case 0 ... 30:
diff --git a/backends/ia64_retval.c b/backends/ia64_retval.c
index b5928c5..0bb280c 100644
--- a/backends/ia64_retval.c
+++ b/backends/ia64_retval.c
@@ -89,6 +89,16 @@ static const Dwarf_Op loc_aggregate[] =
#define nloc_aggregate 1
+static inline int
+compute_hfa (const Dwarf_Op *loc, int nregs, int fpregs_used, const Dwarf_Op **locp)
+{
+ if (fpregs_used == 0)
+ *locp = loc;
+ else if (*locp != loc)
+ return 9;
+ return fpregs_used + nregs;
+}
+
/* If this type is an HFA small enough to be returned in FP registers,
return the number of registers to use. Otherwise 9, or -1 for errors. */
static int
@@ -100,15 +110,6 @@ hfa_type (Dwarf_Die *typedie, Dwarf_Word size,
If we find a datum that's not the same FP type as the first datum, punt.
If we count more than eight total homogeneous FP data, punt. */
- inline int hfa (const Dwarf_Op *loc, int nregs)
- {
- if (fpregs_used == 0)
- *locp = loc;
- else if (*locp != loc)
- return 9;
- return fpregs_used + nregs;
- }
-
int tag = DWARF_TAG_OR_RETURN (typedie);
switch (tag)
{
@@ -123,6 +124,7 @@ hfa_type (Dwarf_Die *typedie, Dwarf_Word size,
&attr_mem), &encoding) != 0)
return -1;
+#define hfa(loc, nregs) compute_hfa(loc, nregs, fpregs_used, locp)
switch (encoding)
{
case DW_ATE_float:
--
2.6.0.rc2.230.g3dd15c0
8 years, 6 months
Compressed section support for libelf prototype.
by Mark Wielaard
Hi,
The following patch series introduces compressed ELF sections in libelf.
It is a prototype. We want to match the interface that other libelf
implementations will use if possible. This version is slightly different
from the one proposed by the Solaris hackers. I also wrote a different
prototype that was based on the elf_[raw]data/new_data interface (which I
lost that one is a freak fight with git...) That one gave the user a bit
more control mixing compressed/decompressed data. But the current interface
is much simpler. I will post about this on the Generic System V Application
Binary Interface mailinglist where also other proposals have been discussed.
If you have comments on the interface please join the discussion there.
https://groups.google.com/forum/#!forum/generic-abi
Comments on the implementation very welcome here of course.
The main thing that is missing is converting between memory and file
representation before compressing if necessary. Which shouldn't be hard.
There is a XXX comment. Also actually writing the compressed or decompressed
data to the file isn't tested at all. I like to add a new program that lets
you [un]compress sections and/or convert between different compression types
next. That would also be a good testcase for the implementation.
Cheers,
Mark
8 years, 6 months