summaryrefslogtreecommitdiff
path: root/upb/pb
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2011-09-20 20:32:25 -0700
committerJoshua Haberman <jhaberman@gmail.com>2011-09-20 20:32:25 -0700
commitc0a08a6827a294f74b0ee5feaf5542081cff4381 (patch)
treea54e053d050f648d52369fcf2932fdc7a872703f /upb/pb
parent56f7a345d7572e118d4a370bb8e79b328d16bc0e (diff)
Fixes to get upb to compile inside Google.
Diffstat (limited to 'upb/pb')
-rw-r--r--upb/pb/decoder_x64.dasc6
-rw-r--r--upb/pb/textprinter.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/upb/pb/decoder_x64.dasc b/upb/pb/decoder_x64.dasc
index c56506e..72c4aa1 100644
--- a/upb/pb/decoder_x64.dasc
+++ b/upb/pb/decoder_x64.dasc
@@ -44,7 +44,9 @@
// for a few magic numbers and doing a dumb string replacement.
#ifndef __APPLE__
+const unsigned char upb_jit_debug_elf_file[] = {
#include "upb/pb/jit_debug_elf_file.h"
+};
typedef enum
{
@@ -73,9 +75,9 @@ void __attribute__((noinline)) __jit_debug_register_code() { __asm__ __volatile_
void upb_reg_jit_gdb(upb_decoder *d) {
// Create debug info.
- size_t elf_len = upb_pb_jit_debug_elf_file_o_len;
+ size_t elf_len = sizeof(upb_jit_debug_elf_file);
d->debug_info = malloc(elf_len);
- memcpy(d->debug_info, upb_pb_jit_debug_elf_file_o, elf_len);
+ memcpy(d->debug_info, upb_jit_debug_elf_file, elf_len);
uint64_t *p = (void*)d->debug_info;
for (; (void*)(p+1) <= (void*)d->debug_info + elf_len; ++p) {
if (*p == 0x12345678) { *p = (uintptr_t)d->jit_code; }
diff --git a/upb/pb/textprinter.c b/upb/pb/textprinter.c
index 434a482..4056b8f 100644
--- a/upb/pb/textprinter.c
+++ b/upb/pb/textprinter.c
@@ -41,7 +41,7 @@ static int upb_textprinter_putescaped(upb_textprinter *p, const upb_strref *strr
// TODO; we could read directly from a bytesrc's buffer instead.
// TODO; we could write strrefs to the sink when possible.
char dstbuf[4096], *dst = dstbuf, *dstend = dstbuf + sizeof(dstbuf);
- char buf[strref->len], *src = buf;
+ char *buf = malloc(strref->len), *src = buf;
char *end = src + strref->len;
upb_bytesrc_read(strref->bytesrc, strref->stream_offset, strref->len, buf);
@@ -81,8 +81,10 @@ static int upb_textprinter_putescaped(upb_textprinter *p, const upb_strref *strr
}
// Flush remaining data.
CHECK(upb_bytesink_write(p->sink, dst, dst - dstbuf));
+ free(buf);
return 0;
err:
+ free(buf);
return -1;
}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback