[04/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_ppc.dasc -- diff --git a/lib/luajit/src/vm_ppc.dasc b/lib/luajit/src/vm_ppc.dasc new file mode 100644 index 000..ad8a023 --- /dev/null +++ b/lib/luajit/src/vm_ppc.dasc @@ -0,0 +1,5160 @@ +|// Low-level VM code for PowerPC CPUs. +|// Bytecode interpreter, fast functions and helper functions. +|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +| +|.arch ppc +|.section code_op, code_sub +| +|.actionlist build_actionlist +|.globals GLOB_ +|.globalnames globnames +|.externnames extnames +| +|// Note: The ragged indentation of the instructions is intentional. +|// The starting columns indicate data dependencies. +| +|//--- +| +|// DynASM defines used by the PPC port: +|// +|// P64 64 bit pointers (only for GPR64 testing). +|// Note: a full PPC64 _LP64 port is not planned. +|// GPR64 64 bit registers (but possibly 32 bit pointers, e.g. PS3). +|// Affects reg saves, stack layout, carry/overflow/dot flags etc. +|// FRAME32 Use 32 bit frame layout, even with GPR64 (Xbox 360). +|// TOC Need table of contents (64 bit or 32 bit variant, e.g. PS3). +|// Function pointers are really a struct: code, TOC, env (optional). +|// TOCENV Function pointers have an environment pointer, too (not on PS3). +|// PPE Power Processor Element of Cell (PS3) or Xenon (Xbox 360). +|// Must avoid (slow) micro-coded instructions. +| +|.if P64 +|.define TOC, 1 +|.define TOCENV, 1 +|.macro lpx, a, b, c; ldx a, b, c; .endmacro +|.macro lp, a, b; ld a, b; .endmacro +|.macro stp, a, b; std a, b; .endmacro +|.define decode_OPP, decode_OP8 +|.if FFI +|// Missing: Calling conventions, 64 bit regs, TOC. +|.error lib_ffi not yet implemented for PPC64 +|.endif +|.else +|.macro lpx, a, b, c; lwzx a, b, c; .endmacro +|.macro lp, a, b; lwz a, b; .endmacro +|.macro stp, a, b; stw a, b; .endmacro +|.define decode_OPP, decode_OP4 +|.endif +| +|// Convenience macros for TOC handling. +|.if TOC +|// Linker needs a TOC patch area for every external call relocation. +|.macro blex, target; bl extern target@plt; nop; .endmacro +|.macro .toc, a, b; a, b; .endmacro +|.if P64 +|.define TOC_OFS, 8 +|.define ENV_OFS, 16 +|.else +|.define TOC_OFS, 4 +|.define ENV_OFS, 8 +|.endif +|.else // No TOC. +|.macro blex, target; bl extern target@plt; .endmacro +|.macro .toc, a, b; .endmacro +|.endif +|.macro .tocenv, a, b; .if TOCENV; a, b; .endif; .endmacro +| +|.macro .gpr64, a, b; .if GPR64; a, b; .endif; .endmacro +| +|.macro andix., y, a, i +|.if PPE +| rlwinm y, a, 0, 31-lj_fls(i), 31-lj_ffs(i) +| cmpwi y, 0 +|.else +| andi. y, a, i +|.endif +|.endmacro +| +|.macro clrso, reg +|.if PPE +| li reg, 0 +| mtxer reg +|.else +| mcrxr cr0 +|.endif +|.endmacro +| +|.macro checkov, reg, noov +|.if PPE +| mfxer reg +| add reg, reg, reg +| cmpwi reg, 0 +| li reg, 0 +| mtxer reg +| bgey noov +|.else +| mcrxr cr0 +| bley noov +|.endif +|.endmacro +| +|//--- +| +|// Fixed register assignments for the interpreter. +|// Don't use: r1 = sp, r2 and r13 = reserved (TOC, TLS or SDATA) +| +|// The following must be C callee-save (but BASE is often refetched). +|.define BASE, r14 // Base of current Lua stack frame. +|.define KBASE,r15 // Constants of current Lua function. +|.define PC, r16 // Next PC. +|.define DISPATCH, r17 // Opcode dispatch table. +|.define LREG, r18 // Register holding lua_State (also in SAVE_L). +|.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. +|.define JGL, r31 // On-trace: global_State + 32768. +| +|// Constants for type-comparisons, stores and conversions. C callee-save. +|.define TISNUM, r22 +|.define TISNIL, r23 +|.define ZERO, r24 +|.define TOBIT,f30 // 2^52 + 2^51. +|.define TONUM,f31 // 2^52 + 2^51 + 2^31. +| +|// The following temporaries are not saved across C calls, except for RA. +|.define RA, r20 // Callee-save. +|.define RB, r10 +|.define RC, r11 +|.define RD, r12 +|.define INS, r7 // Overlaps CARG5. +| +|.define TMP0, r0 +|.define TMP1, r8 +|.define TMP2, r9 +|.define TMP3, r6 // Overlaps CARG4. +| +|// Saved temporaries. +|.define SAVE0,r21 +| +|// Calling conventions. +|.define CARG1,r3 +|.define CARG2,r4 +|.define CARG3,r5 +|.define CARG4,r6 // Overlaps TMP3. +|.define CARG5,r7 // Overlaps INS. +| +|.define FARG1,f1 +|.define FARG2,f2 +| +|.define CRET1,
[11/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_parse.c -- diff --git a/lib/luajit/src/lj_parse.c b/lib/luajit/src/lj_parse.c new file mode 100644 index 000..abfac3c --- /dev/null +++ b/lib/luajit/src/lj_parse.c @@ -0,0 +1,2754 @@ +/* +** Lua parser (source code - bytecode). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +** +** Major portions taken verbatim or adapted from the Lua interpreter. +** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h +*/ + +#define lj_parse_c +#define LUA_CORE + +#include lj_obj.h +#include lj_gc.h +#include lj_err.h +#include lj_debug.h +#include lj_str.h +#include lj_tab.h +#include lj_func.h +#include lj_state.h +#include lj_bc.h +#if LJ_HASFFI +#include lj_ctype.h +#endif +#include lj_lex.h +#include lj_parse.h +#include lj_vm.h +#include lj_vmevent.h + +/* -- Parser structures and definitions --- */ + +/* Expression kinds. */ +typedef enum { + /* Constant expressions must be first and in this order: */ + VKNIL, + VKFALSE, + VKTRUE, + VKSTR, /* sval = string value */ + VKNUM, /* nval = number value */ + VKLAST = VKNUM, + VKCDATA, /* nval = cdata value, not treated as a constant expression */ + /* Non-constant expressions follow: */ + VLOCAL, /* info = local register, aux = vstack index */ + VUPVAL, /* info = upvalue index, aux = vstack index */ + VGLOBAL, /* sval = string value */ + VINDEXED,/* info = table register, aux = index reg/byte/string const */ + VJMP,/* info = instruction PC */ + VRELOCABLE, /* info = instruction PC */ + VNONRELOC, /* info = result register */ + VCALL, /* info = instruction PC, aux = base */ + VVOID +} ExpKind; + +/* Expression descriptor. */ +typedef struct ExpDesc { + union { +struct { + uint32_t info; /* Primary info. */ + uint32_t aux;/* Secondary info. */ +} s; +TValue nval; /* Number value. */ +GCstr *sval; /* String value. */ + } u; + ExpKind k; + BCPos t; /* True condition jump list. */ + BCPos f; /* False condition jump list. */ +} ExpDesc; + +/* Macros for expressions. */ +#define expr_hasjump(e)((e)-t != (e)-f) + +#define expr_isk(e)((e)-k = VKLAST) +#define expr_isk_nojump(e) (expr_isk(e) !expr_hasjump(e)) +#define expr_isnumk(e) ((e)-k == VKNUM) +#define expr_isnumk_nojump(e) (expr_isnumk(e) !expr_hasjump(e)) +#define expr_isstrk(e) ((e)-k == VKSTR) + +#define expr_numtv(e) check_exp(expr_isnumk((e)), (e)-u.nval) +#define expr_numberV(e)numberVnum(expr_numtv((e))) + +/* Initialize expression. */ +static LJ_AINLINE void expr_init(ExpDesc *e, ExpKind k, uint32_t info) +{ + e-k = k; + e-u.s.info = info; + e-f = e-t = NO_JMP; +} + +/* Check number constant for +-0. */ +static int expr_numiszero(ExpDesc *e) +{ + TValue *o = expr_numtv(e); + return tvisint(o) ? (intV(o) == 0) : tviszero(o); +} + +/* Per-function linked list of scope blocks. */ +typedef struct FuncScope { + struct FuncScope *prev; /* Link to outer scope. */ + MSize vstart;/* Start of block-local variables. */ + uint8_t nactvar; /* Number of active vars outside the scope. */ + uint8_t flags; /* Scope flags. */ +} FuncScope; + +#define FSCOPE_LOOP0x01/* Scope is a (breakable) loop. */ +#define FSCOPE_BREAK 0x02/* Break used in scope. */ +#define FSCOPE_GOLA0x04/* Goto or label used in scope. */ +#define FSCOPE_UPVAL 0x08/* Upvalue in scope. */ +#define FSCOPE_NOCLOSE 0x10/* Do not close upvalues. */ + +#define NAME_BREAK ((GCstr *)(uintptr_t)1) + +/* Index into variable stack. */ +typedef uint16_t VarIndex; +#define LJ_MAX_VSTACK (65536 - LJ_MAX_UPVAL) + +/* Variable/goto/label info. */ +#define VSTACK_VAR_RW 0x01/* R/W variable. */ +#define VSTACK_GOTO0x02/* Pending goto. */ +#define VSTACK_LABEL 0x04/* Label. */ + +/* Per-function state. */ +typedef struct FuncState { + GCtab *kt; /* Hash table for constants. */ + LexState *ls;/* Lexer state. */ + lua_State *L;/* Lua state. */ + FuncScope *bl; /* Current scope. */ + struct FuncState *prev; /* Enclosing function. */ + BCPos pc;/* Next bytecode position. */ + BCPos lasttarget;/* Bytecode position of last jump target. */ + BCPos jpc; /* Pending jump list to next bytecode. */ + BCReg freereg; /* First free register. */ + BCReg nactvar; /* Number of active local variables. */ + BCReg nkn, nkgc; /* Number of lua_Number/GCobj constants */ +
[05/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_mips.dasc -- diff --git a/lib/luajit/src/vm_mips.dasc b/lib/luajit/src/vm_mips.dasc new file mode 100644 index 000..ac8346b --- /dev/null +++ b/lib/luajit/src/vm_mips.dasc @@ -0,0 +1,4241 @@ +|// Low-level VM code for MIPS CPUs. +|// Bytecode interpreter, fast functions and helper functions. +|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +| +|.arch mips +|.section code_op, code_sub +| +|.actionlist build_actionlist +|.globals GLOB_ +|.globalnames globnames +|.externnames extnames +| +|// Note: The ragged indentation of the instructions is intentional. +|// The starting columns indicate data dependencies. +| +|//--- +| +|// Fixed register assignments for the interpreter. +|// Don't use: r0 = 0, r26/r27 = reserved, r28 = gp, r29 = sp, r31 = ra +| +|// The following must be C callee-save (but BASE is often refetched). +|.define BASE, r16 // Base of current Lua stack frame. +|.define KBASE,r17 // Constants of current Lua function. +|.define PC, r18 // Next PC. +|.define DISPATCH, r19 // Opcode dispatch table. +|.define LREG, r20 // Register holding lua_State (also in SAVE_L). +|.define MULTRES, r21 // Size of multi-result: (nresults+1)*8. +|// NYI: r22 currently unused. +| +|.define JGL, r30 // On-trace: global_State + 32768. +| +|// Constants for type-comparisons, stores and conversions. C callee-save. +|.define TISNIL, r30 +|.define TOBIT,f30 // 2^52 + 2^51. +| +|// The following temporaries are not saved across C calls, except for RA. +|.define RA, r23 // Callee-save. +|.define RB, r8 +|.define RC, r9 +|.define RD, r10 +|.define INS, r11 +| +|.define AT, r1 // Assembler temporary. +|.define TMP0, r12 +|.define TMP1, r13 +|.define TMP2, r14 +|.define TMP3, r15 +| +|// Calling conventions. +|.define CFUNCADDR,r25 +|.define CARG1,r4 +|.define CARG2,r5 +|.define CARG3,r6 +|.define CARG4,r7 +| +|.define CRET1,r2 +|.define CRET2,r3 +| +|.define FARG1,f12 +|.define FARG2,f14 +| +|.define FRET1,f0 +|.define FRET2,f2 +| +|// Stack layout while in interpreter. Must match with lj_frame.h. +|.define CFRAME_SPACE, 112 // Delta for sp. +| +|.define SAVE_ERRF,124(sp) // 32 bit C frame info. +|.define SAVE_NRES,120(sp) +|.define SAVE_CFRAME, 116(sp) +|.define SAVE_L, 112(sp) +|//- 8 byte aligned, 16 byte register save area, owned by interpreter. +|.define SAVE_GPR_,72 // .. 72+10*4: 32 bit GPR saves. +|.define SAVE_FPR_,24 // .. 24+6*8: 64 bit FPR saves. +|.define SAVE_PC, 20(sp) +|.define ARG5, 16(sp) +|.define CSAVE_4, 12(sp) +|.define CSAVE_3, 8(sp) +|.define CSAVE_2, 4(sp) +|.define CSAVE_1, 0(sp) +|//- 8 byte aligned, 16 byte register save area, owned by callee. +| +|.define ARG5_OFS, 16 +|.define SAVE_MULTRES, ARG5 +| +|.macro saveregs +| addiu sp, sp, -CFRAME_SPACE +| sw ra, SAVE_GPR_+9*4(sp) +| sw r30, SAVE_GPR_+8*4(sp) +| sdc1 f30, SAVE_FPR_+5*8(sp) +| sw r23, SAVE_GPR_+7*4(sp) +| sw r22, SAVE_GPR_+6*4(sp) +| sdc1 f28, SAVE_FPR_+4*8(sp) +| sw r21, SAVE_GPR_+5*4(sp) +| sw r20, SAVE_GPR_+4*4(sp) +| sdc1 f26, SAVE_FPR_+3*8(sp) +| sw r19, SAVE_GPR_+3*4(sp) +| sw r18, SAVE_GPR_+2*4(sp) +| sdc1 f24, SAVE_FPR_+2*8(sp) +| sw r17, SAVE_GPR_+1*4(sp) +| sw r16, SAVE_GPR_+0*4(sp) +| sdc1 f22, SAVE_FPR_+1*8(sp) +| sdc1 f20, SAVE_FPR_+0*8(sp) +|.endmacro +| +|.macro restoreregs_ret +| lw ra, SAVE_GPR_+9*4(sp) +| lw r30, SAVE_GPR_+8*4(sp) +| ldc1 f30, SAVE_FPR_+5*8(sp) +| lw r23, SAVE_GPR_+7*4(sp) +| lw r22, SAVE_GPR_+6*4(sp) +| ldc1 f28, SAVE_FPR_+4*8(sp) +| lw r21, SAVE_GPR_+5*4(sp) +| lw r20, SAVE_GPR_+4*4(sp) +| ldc1 f26, SAVE_FPR_+3*8(sp) +| lw r19, SAVE_GPR_+3*4(sp) +| lw r18, SAVE_GPR_+2*4(sp) +| ldc1 f24, SAVE_FPR_+2*8(sp) +| lw r17, SAVE_GPR_+1*4(sp) +| lw r16, SAVE_GPR_+0*4(sp) +| ldc1 f22, SAVE_FPR_+1*8(sp) +| ldc1 f20, SAVE_FPR_+0*8(sp) +| jr ra +| addiu sp, sp, CFRAME_SPACE +|.endmacro +| +|// Type definitions. Some of these are only used for documentation. +|.type L, lua_State, LREG +|.type GL, global_State +|.type TVALUE, TValue +|.type GCOBJ, GCobj +|.type STR,GCstr +|.type TAB,GCtab +|.type LFUNC, GCfuncL +|.type CFUNC, GCfuncC +|.type PROTO, GCproto +|.type UPVAL, GCupval +|.type NODE, Node +|.type NARGS8, int +|.type TRACE,
[59/62] [abbrv] trafficserver git commit: TS-3800: HostDB UI: support json output, improve srv records, add hostnames
TS-3800: HostDB UI: support json output, improve srv records, add hostnames Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0e703e1e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0e703e1e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0e703e1e Branch: refs/heads/6.0.x Commit: 0e703e1e3b7198f5c4b0648971fd35d56421e4fd Parents: 95f45d4 Author: Brian Geffon bri...@apache.org Authored: Mon Jul 27 22:14:09 2015 -0700 Committer: Brian Geffon bri...@apache.org Committed: Mon Jul 27 22:14:09 2015 -0700 -- iocore/hostdb/HostDB.cc | 169 ++--- iocore/hostdb/I_HostDBProcessor.h | 3 + proxy/Show.h | 16 +++- 3 files changed, 153 insertions(+), 35 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0e703e1e/iocore/hostdb/HostDB.cc -- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index 9d5ece3..5a9c85a 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -1364,6 +1364,12 @@ HostDBContinuation::lookup_done(IpAddr const ip, char const *aname, bool around } } } + + const size_t s_size = strlen(aname) + 1; + void *host_dest = hostDB.alloc(i-hostname_offset, s_size); + ink_strlcpy((char *)host_dest, aname, s_size); + *((char *)host_dest + s_size) = '\0'; + if (from_cont) do_put_response(from, i, from_cont); ink_assert(!i-round_robin || !i-reverse_dns); @@ -2311,6 +2317,17 @@ HostDBInfo::hostname() return (char *)hostDB.ptr(data.hostname_offset, hostDB.ptr_to_partition((char *)this)); } +/* + * The perm_hostname exists for all records not just reverse dns records. + */ +char * +HostDBInfo::perm_hostname() +{ + if (hostname_offset == 0) +return NULL; + + return (char *)hostDB.ptr(hostname_offset, hostDB.ptr_to_partition((char *)this)); +} HostDBRoundRobin * HostDBInfo::rr() @@ -2373,6 +2390,8 @@ struct ShowHostDB : public ShowCont { uint16_t port; IpEndpoint ip; bool force; + bool output_json; + int records_seen; int showMain(int event, Event *e) @@ -2412,8 +2431,12 @@ struct ShowHostDB : public ShowCont { int showAll(int event, Event *e) { -CHECK_SHOW(begin(HostDB All Records)); -CHECK_SHOW(show(hr)); +if (!output_json) { + CHECK_SHOW(begin(HostDB All Records)); + CHECK_SHOW(show(hr)); +} else { + CHECK_SHOW(show([)); +} SET_HANDLER(ShowHostDB::showAllEvent); hostDBProcessor.iterate(this); return EVENT_CONT; @@ -2424,22 +2447,54 @@ struct ShowHostDB : public ShowCont { { if (event == EVENT_INTERVAL) { HostDBInfo *r = reinterpret_castHostDBInfo *(e); + if (output_json records_seen++ 0) { +CHECK_SHOW(show(,)); // we need to seperate records + } showOne(r, false, event, e); if (r-round_robin) { HostDBRoundRobin *rr_data = r-rr(); if (rr_data) { - CHECK_SHOW(show(table border=1\n)); - CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Total, rr_data-rrcount)); - CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Good, rr_data-good)); - CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Current, rr_data-current)); - CHECK_SHOW(show(/table\n)); + if (!output_json) { +CHECK_SHOW(show(table border=1\n)); +CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Total, rr_data-rrcount)); +CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Good, rr_data-good)); +CHECK_SHOW(show(trtd%s/tdtd%d/td/tr\n, Current, rr_data-current)); +CHECK_SHOW(show(/table\n)); + } else { +CHECK_SHOW(show(,\%s\:\%d\,, rr_total, rr_data-rrcount)); +CHECK_SHOW(show(\%s\:\%d\,, rr_good, rr_data-good)); +CHECK_SHOW(show(\%s\:\%d\,, rr_current, rr_data-current)); +CHECK_SHOW(show(\rr_records\:[)); + } - for (int i = 0; i rr_data-rrcount; i++) -showOne(rr_data-info[i], true, event, e); + for (int i = 0; i rr_data-rrcount; i++) { +showOne(rr_data-info[i], true, event, e, rr_data); +if (output_json) { + CHECK_SHOW(show(})); // we need to seperate records + if (i (rr_data-rrcount - 1)) +CHECK_SHOW(show(,)); +} + } + + if (!output_json) { +CHECK_SHOW(show(br /\nbr /\n)); + } else { +CHECK_SHOW(show(])); + } } } + + if (output_json) { +CHECK_SHOW(show(})); + } + } else if (event == EVENT_DONE) { - return complete(event, e); + if (output_json) { +CHECK_SHOW(show(])); +return
[50/62] [abbrv] trafficserver git commit: Revert TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition
Revert TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition This reverts commit 3678a6e11b53520c35d06c7d8baed79f43f812e2. I have no idea what happened here, but it seems tangled with the Luajit commit for reason. Going to try it again. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/c14f8743 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/c14f8743 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/c14f8743 Branch: refs/heads/6.0.x Commit: c14f874378383b6abaef0238097a066b4f900f90 Parents: a43a124 Author: Leif Hedstrom zw...@apache.org Authored: Fri Jul 24 01:51:00 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 01:51:38 2015 -0600 -- .../experimental/cache_promote/cache_promote.cc | 25 +--- 1 file changed, 6 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/c14f8743/plugins/experimental/cache_promote/cache_promote.cc -- diff --git a/plugins/experimental/cache_promote/cache_promote.cc b/plugins/experimental/cache_promote/cache_promote.cc index dab961d..9c2edb6 100644 --- a/plugins/experimental/cache_promote/cache_promote.cc +++ b/plugins/experimental/cache_promote/cache_promote.cc @@ -34,8 +34,6 @@ static const char *PLUGIN_NAME = cache_promote; -TSCont gNocacheCont; - // // Note that all options for all policies has to go here. Not particularly pretty... @@ -374,20 +372,6 @@ private: // -// Little helper continuation, to turn off writing to the cache. ToDo: when we have proper -// APIs to make requests / responses, we can remove this completely. -static int -cont_nocache_response(TSCont contp, TSEvent event, void *edata) -{ - TSHttpTxn txnp = static_castTSHttpTxn(edata); - - TSHttpTxnServerRespNoStoreSet(txnp, 1); - // Reenable and continue with the state machine. - TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); - return 0; -} - -// // Main plugin, a TXN hook in the TS_HTTP_READ_CACHE_HDR_HOOK. Unless the policy allows // caching, we will turn off the cache from here on for the TXN. // @@ -415,7 +399,7 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) TSDebug(PLUGIN_NAME, cache-status is %d, and leaving cache on (promoted), obj_status); } else { TSDebug(PLUGIN_NAME, cache-status is %d, and turning off the cache (not promoted), obj_status); -TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, gNocacheCont); +TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, contp); } break; default: @@ -429,6 +413,11 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) } break; + // Temporaray hack, to deal with the fact that we can turn off the cache earlier + case TS_EVENT_HTTP_READ_RESPONSE_HDR: +TSHttpTxnServerRespNoStoreSet(txnp, 1); +break; + // Should not happen default: TSDebug(PLUGIN_NAME, Unhandled event %d, (int)event); @@ -458,8 +447,6 @@ TSRemapInit(TSRemapInterface *api_info, char *errbuf, int errbuf_size) return TS_ERROR; } - gNocacheCont = TSContCreate(cont_nocache_response, NULL); - TSDebug(PLUGIN_NAME, remap plugin is successfully initialized); return TS_SUCCESS; /* success */ }
[06/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_arm.dasc -- diff --git a/lib/luajit/src/vm_arm.dasc b/lib/luajit/src/vm_arm.dasc new file mode 100644 index 000..457efa6 --- /dev/null +++ b/lib/luajit/src/vm_arm.dasc @@ -0,0 +1,4486 @@ +|// Low-level VM code for ARM CPUs. +|// Bytecode interpreter, fast functions and helper functions. +|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +| +|.arch arm +|.section code_op, code_sub +| +|.actionlist build_actionlist +|.globals GLOB_ +|.globalnames globnames +|.externnames extnames +| +|// Note: The ragged indentation of the instructions is intentional. +|// The starting columns indicate data dependencies. +| +|//--- +| +|// Fixed register assignments for the interpreter. +| +|// The following must be C callee-save. +|.define MASKR8, r4 // 255*8 constant for fast bytecode decoding. +|.define KBASE,r5 // Constants of current Lua function. +|.define PC, r6 // Next PC. +|.define DISPATCH, r7 // Opcode dispatch table. +|.define LREG, r8 // Register holding lua_State (also in SAVE_L). +| +|// C callee-save in EABI, but often refetched. Temporary in iOS 3.0+. +|.define BASE, r9 // Base of current Lua stack frame. +| +|// The following temporaries are not saved across C calls, except for RA/RC. +|.define RA, r10 // Callee-save. +|.define RC, r11 // Callee-save. +|.define RB, r12 +|.define OP, r12 // Overlaps RB, must not be lr. +|.define INS, lr +| +|// Calling conventions. Also used as temporaries. +|.define CARG1,r0 +|.define CARG2,r1 +|.define CARG3,r2 +|.define CARG4,r3 +|.define CARG12, r0 // For 1st soft-fp double. +|.define CARG34, r2 // For 2nd soft-fp double. +| +|.define CRET1,r0 +|.define CRET2,r1 +| +|// Stack layout while in interpreter. Must match with lj_frame.h. +|.define SAVE_R4, [sp, #28] +|.define CFRAME_SPACE, #28 +|.define SAVE_ERRF,[sp, #24] +|.define SAVE_NRES,[sp, #20] +|.define SAVE_CFRAME, [sp, #16] +|.define SAVE_L, [sp, #12] +|.define SAVE_PC, [sp, #8] +|.define SAVE_MULTRES, [sp, #4] +|.define ARG5, [sp] +| +|.define TMPDhi, [sp, #4] +|.define TMPDlo, [sp] +|.define TMPD, [sp] +|.define TMPDp,sp +| +|.if FPU +|.macro saveregs +| push {r5, r6, r7, r8, r9, r10, r11, lr} +| vpush {d8-d15} +| sub sp, sp, CFRAME_SPACE+4 +| str r4, SAVE_R4 +|.endmacro +|.macro restoreregs_ret +| ldr r4, SAVE_R4 +| add sp, sp, CFRAME_SPACE+4 +| vpop {d8-d15} +| pop {r5, r6, r7, r8, r9, r10, r11, pc} +|.endmacro +|.else +|.macro saveregs +| push {r4, r5, r6, r7, r8, r9, r10, r11, lr} +| sub sp, sp, CFRAME_SPACE +|.endmacro +|.macro restoreregs_ret +| add sp, sp, CFRAME_SPACE +| pop {r4, r5, r6, r7, r8, r9, r10, r11, pc} +|.endmacro +|.endif +| +|// Type definitions. Some of these are only used for documentation. +|.type L, lua_State, LREG +|.type GL, global_State +|.type TVALUE, TValue +|.type GCOBJ, GCobj +|.type STR,GCstr +|.type TAB,GCtab +|.type LFUNC, GCfuncL +|.type CFUNC, GCfuncC +|.type PROTO, GCproto +|.type UPVAL, GCupval +|.type NODE, Node +|.type NARGS8, int +|.type TRACE, GCtrace +| +|//--- +| +|// Trap for not-yet-implemented parts. +|.macro NYI; ud; .endmacro +| +|//--- +| +|// Access to frame relative to BASE. +|.define FRAME_FUNC, #-8 +|.define FRAME_PC, #-4 +| +|.macro decode_RA8, dst, ins; and dst, MASKR8, ins, lsr #5; .endmacro +|.macro decode_RB8, dst, ins; and dst, MASKR8, ins, lsr #21; .endmacro +|.macro decode_RC8, dst, ins; and dst, MASKR8, ins, lsr #13; .endmacro +|.macro decode_RD, dst, ins; lsr dst, ins, #16; .endmacro +|.macro decode_OP, dst, ins; and dst, ins, #255; .endmacro +| +|// Instruction fetch. +|.macro ins_NEXT1 +| ldrb OP, [PC] +|.endmacro +|.macro ins_NEXT2 +| ldr INS, [PC], #4 +|.endmacro +|// Instruction decode+dispatch. +|.macro ins_NEXT3 +| ldr OP, [DISPATCH, OP, lsl #2] +| decode_RA8 RA, INS +| decode_RD RC, INS +| bx OP +|.endmacro +|.macro ins_NEXT +| ins_NEXT1 +| ins_NEXT2 +| ins_NEXT3 +|.endmacro +| +|// Instruction footer. +|.if 1 +| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. +| .define ins_next, ins_NEXT +| .define ins_next_, ins_NEXT +| .define ins_next1, ins_NEXT1 +| .define ins_next2, ins_NEXT2 +| .define ins_next3, ins_NEXT3 +|.else +| // Common
[02/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_x86.dasc -- diff --git a/lib/luajit/src/vm_x86.dasc b/lib/luajit/src/vm_x86.dasc new file mode 100644 index 000..6cdb8cb --- /dev/null +++ b/lib/luajit/src/vm_x86.dasc @@ -0,0 +1,6377 @@ +|// Low-level VM code for x86 CPUs. +|// Bytecode interpreter, fast functions and helper functions. +|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +| +|.if P64 +|.arch x64 +|.else +|.arch x86 +|.endif +|.section code_op, code_sub +| +|.actionlist build_actionlist +|.globals GLOB_ +|.globalnames globnames +|.externnames extnames +| +|//--- +| +|.if P64 +|.define X64, 1 +|.define SSE, 1 +|.if WIN +|.define X64WIN, 1 +|.endif +|.endif +| +|// Fixed register assignments for the interpreter. +|// This is very fragile and has many dependencies. Caveat emptor. +|.define BASE, edx // Not C callee-save, refetched anyway. +|.if not X64 +|.define KBASE,edi // Must be C callee-save. +|.define KBASEa, KBASE +|.define PC, esi // Must be C callee-save. +|.define PCa, PC +|.define DISPATCH, ebx // Must be C callee-save. +|.elif X64WIN +|.define KBASE,edi // Must be C callee-save. +|.define KBASEa, rdi +|.define PC, esi // Must be C callee-save. +|.define PCa, rsi +|.define DISPATCH, ebx // Must be C callee-save. +|.else +|.define KBASE,r15d// Must be C callee-save. +|.define KBASEa, r15 +|.define PC, ebx // Must be C callee-save. +|.define PCa, rbx +|.define DISPATCH, r14d// Must be C callee-save. +|.endif +| +|.define RA, ecx +|.define RAH, ch +|.define RAL, cl +|.define RB, ebp // Must be ebp (C callee-save). +|.define RC, eax // Must be eax. +|.define RCW, ax +|.define RCH, ah +|.define RCL, al +|.define OP, RB +|.define RD, RC +|.define RDW, RCW +|.define RDL, RCL +|.if X64 +|.define RAa, rcx +|.define RBa, rbp +|.define RCa, rax +|.define RDa, rax +|.else +|.define RAa, RA +|.define RBa, RB +|.define RCa, RC +|.define RDa, RD +|.endif +| +|.if not X64 +|.define FCARG1, ecx // x86 fastcall arguments. +|.define FCARG2, edx +|.elif X64WIN +|.define CARG1,rcx // x64/WIN64 C call arguments. +|.define CARG2,rdx +|.define CARG3,r8 +|.define CARG4,r9 +|.define CARG1d, ecx +|.define CARG2d, edx +|.define CARG3d, r8d +|.define CARG4d, r9d +|.define FCARG1, CARG1d // Upwards compatible to x86 fastcall. +|.define FCARG2, CARG2d +|.else +|.define CARG1,rdi // x64/POSIX C call arguments. +|.define CARG2,rsi +|.define CARG3,rdx +|.define CARG4,rcx +|.define CARG5,r8 +|.define CARG6,r9 +|.define CARG1d, edi +|.define CARG2d, esi +|.define CARG3d, edx +|.define CARG4d, ecx +|.define CARG5d, r8d +|.define CARG6d, r9d +|.define FCARG1, CARG1d // Simulate x86 fastcall. +|.define FCARG2, CARG2d +|.endif +| +|// Type definitions. Some of these are only used for documentation. +|.type L, lua_State +|.type GL, global_State +|.type TVALUE, TValue +|.type GCOBJ, GCobj +|.type STR,GCstr +|.type TAB,GCtab +|.type LFUNC, GCfuncL +|.type CFUNC, GCfuncC +|.type PROTO, GCproto +|.type UPVAL, GCupval +|.type NODE, Node +|.type NARGS, int +|.type TRACE, GCtrace +| +|// Stack layout while in interpreter. Must match with lj_frame.h. +|//--- +|.if not X64 // x86 stack layout. +| +|.define CFRAME_SPACE, aword*7 // Delta for esp (see --). +|.macro saveregs_ +| push edi; push esi; push ebx +| sub esp, CFRAME_SPACE +|.endmacro +|.macro saveregs +| push ebp; saveregs_ +|.endmacro +|.macro restoreregs +| add esp, CFRAME_SPACE +| pop ebx; pop esi; pop edi; pop ebp +|.endmacro +| +|.define SAVE_ERRF,aword [esp+aword*15]// vm_pcall/vm_cpcall only. +|.define SAVE_NRES,aword [esp+aword*14] +|.define SAVE_CFRAME, aword [esp+aword*13] +|.define SAVE_L, aword [esp+aword*12] +|//- 16 byte aligned, ^^^ arguments from C caller +|.define SAVE_RET, aword [esp+aword*11]//-- esp entering interpreter. +|.define SAVE_R4, aword [esp+aword*10] +|.define SAVE_R3, aword [esp+aword*9]
[30/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lib_math.c -- diff --git a/lib/luajit/src/lib_math.c b/lib/luajit/src/lib_math.c new file mode 100644 index 000..40f2914 --- /dev/null +++ b/lib/luajit/src/lib_math.c @@ -0,0 +1,233 @@ +/* +** Math library. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#include math.h + +#define lib_math_c +#define LUA_LIB + +#include lua.h +#include lauxlib.h +#include lualib.h + +#include lj_obj.h +#include lj_lib.h +#include lj_vm.h + +/* */ + +#define LJLIB_MODULE_math + +LJLIB_ASM(math_abs)LJLIB_REC(.) +{ + lj_lib_checknumber(L, 1); + return FFH_RETRY; +} +LJLIB_ASM_(math_floor) LJLIB_REC(math_round IRFPM_FLOOR) +LJLIB_ASM_(math_ceil) LJLIB_REC(math_round IRFPM_CEIL) + +LJLIB_ASM(math_sqrt) LJLIB_REC(math_unary IRFPM_SQRT) +{ + lj_lib_checknum(L, 1); + return FFH_RETRY; +} +LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10) +LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP) +LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN) +LJLIB_ASM_(math_cos) LJLIB_REC(math_unary IRFPM_COS) +LJLIB_ASM_(math_tan) LJLIB_REC(math_unary IRFPM_TAN) +LJLIB_ASM_(math_asin) LJLIB_REC(math_atrig FF_math_asin) +LJLIB_ASM_(math_acos) LJLIB_REC(math_atrig FF_math_acos) +LJLIB_ASM_(math_atan) LJLIB_REC(math_atrig FF_math_atan) +LJLIB_ASM_(math_sinh) LJLIB_REC(math_htrig IRCALL_sinh) +LJLIB_ASM_(math_cosh) LJLIB_REC(math_htrig IRCALL_cosh) +LJLIB_ASM_(math_tanh) LJLIB_REC(math_htrig IRCALL_tanh) +LJLIB_ASM_(math_frexp) +LJLIB_ASM_(math_modf) LJLIB_REC(.) + +LJLIB_PUSH(57.29577951308232) +LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad) + +LJLIB_PUSH(0.017453292519943295) +LJLIB_ASM_(math_rad) LJLIB_REC(math_degrad) + +LJLIB_ASM(math_log)LJLIB_REC(math_log) +{ + double x = lj_lib_checknum(L, 1); + if (L-base+1 L-top) { +double y = lj_lib_checknum(L, 2); +#ifdef LUAJIT_NO_LOG2 +x = log(x); y = 1.0 / log(y); +#else +x = lj_vm_log2(x); y = 1.0 / lj_vm_log2(y); +#endif +setnumV(L-base-1, x*y); /* Do NOT join the expression to x / y. */ +return FFH_RES(1); + } + return FFH_RETRY; +} + +LJLIB_ASM(math_atan2) LJLIB_REC(.) +{ + lj_lib_checknum(L, 1); + lj_lib_checknum(L, 2); + return FFH_RETRY; +} +LJLIB_ASM_(math_pow) LJLIB_REC(.) +LJLIB_ASM_(math_fmod) + +LJLIB_ASM(math_ldexp) LJLIB_REC(.) +{ + lj_lib_checknum(L, 1); +#if LJ_DUALNUM !LJ_TARGET_X86ORX64 + lj_lib_checkint(L, 2); +#else + lj_lib_checknum(L, 2); +#endif + return FFH_RETRY; +} + +LJLIB_ASM(math_min)LJLIB_REC(math_minmax IR_MIN) +{ + int i = 0; + do { lj_lib_checknumber(L, ++i); } while (L-base+i L-top); + return FFH_RETRY; +} +LJLIB_ASM_(math_max) LJLIB_REC(math_minmax IR_MAX) + +LJLIB_PUSH(3.14159265358979323846) LJLIB_SET(pi) +LJLIB_PUSH(1e310) LJLIB_SET(huge) + +/* */ + +/* This implements a Tausworthe PRNG with period 2^223. Based on: +** Tables of maximally-equidistributed combined LFSR generators, +** Pierre L'Ecuyer, 1991, table 3, 1st entry. +** Full-period ME-CF generator with L=64, J=4, k=223, N1=49. +*/ + +/* PRNG state. */ +struct RandomState { + uint64_t gen[4]; /* State of the 4 LFSR generators. */ + int valid; /* State is valid. */ +}; + +/* Union needed for bit-pattern conversion between uint64_t and double. */ +typedef union { uint64_t u64; double d; } U64double; + +/* Update generator i and compute a running xor of all states. */ +#define TW223_GEN(i, k, q, s) \ + z = rs-gen[i]; \ + z = (((zq)^z) (k-s)) ^ ((z((uint64_t)(int64_t)-1 (64-k)))s); \ + r ^= z; rs-gen[i] = z; + +/* PRNG step function. Returns a double in the range 1.0 = d 2.0. */ +LJ_NOINLINE uint64_t LJ_FASTCALL lj_math_random_step(RandomState *rs) +{ + uint64_t z, r = 0; + TW223_GEN(0, 63, 31, 18) + TW223_GEN(1, 58, 19, 28) + TW223_GEN(2, 55, 24, 7) + TW223_GEN(3, 47, 21, 8) + return (r U64x(000f,)) | U64x(3ff0,); +} + +/* PRNG initialization function. */ +static void random_init(RandomState *rs, double d) +{ + uint32_t r = 0x11090601; /* 64-k[i] as four 8 bit constants. */ + int i; + for (i = 0; i 4; i++) { +U64double u; +uint32_t m = 1u (r255); +r = 8; +u.d = d = d * 3.14159265358979323846 + 2.7182818284590452354; +if (u.u64 m) u.u64 += m; /* Ensure k[i] MSB of gen[i] are non-zero. */ +rs-gen[i] = u.u64; + } + rs-valid = 1; + for (i = 0; i 10; i++) +lj_math_random_step(rs); +} + +/* PRNG extract function. */ +LJLIB_PUSH(top-2) /* Upvalue holds userdata with RandomState. */ +LJLIB_CF(math_random)
trafficserver git commit: TS-3803: CID 1313322 CID 1313322: HostDB memory issues (introduced in TS-3800)
Repository: trafficserver Updated Branches: refs/heads/master ec7479243 - 0cd1ef3ed TS-3803: CID 1313322 CID 1313322: HostDB memory issues (introduced in TS-3800) Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0cd1ef3e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0cd1ef3e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0cd1ef3e Branch: refs/heads/master Commit: 0cd1ef3ed5e4e6e3a332bccdd07220be717f2226 Parents: ec74792 Author: Brian Geffon bri...@apache.org Authored: Tue Jul 28 19:43:35 2015 -0700 Committer: Brian Geffon bri...@apache.org Committed: Tue Jul 28 19:43:35 2015 -0700 -- iocore/hostdb/HostDB.cc | 16 1 file changed, 12 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0cd1ef3e/iocore/hostdb/HostDB.cc -- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index 5a9c85a..0d36fd6 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -1365,10 +1365,18 @@ HostDBContinuation::lookup_done(IpAddr const ip, char const *aname, bool around } } - const size_t s_size = strlen(aname) + 1; - void *host_dest = hostDB.alloc(i-hostname_offset, s_size); - ink_strlcpy((char *)host_dest, aname, s_size); - *((char *)host_dest + s_size) = '\0'; + if (aname) { +const size_t s_size = strlen(aname) + 1; +void *host_dest = hostDB.alloc(i-hostname_offset, s_size); +if (host_dest) { + ink_strlcpy((char *)host_dest, aname, s_size); + *((char *)host_dest + s_size) = '\0'; +} else { + Warning(Out of room in hostdb for hostname (data area full!)); + hostDB.delete_block(i); + return NULL; +} + } if (from_cont) do_put_response(from, i, from_cont);
[23/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_bc.c -- diff --git a/lib/luajit/src/lj_bc.c b/lib/luajit/src/lj_bc.c new file mode 100644 index 000..a8f444c --- /dev/null +++ b/lib/luajit/src/lj_bc.c @@ -0,0 +1,14 @@ +/* +** Bytecode instruction modes. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_bc_c +#define LUA_CORE + +#include lj_obj.h +#include lj_bc.h + +/* Bytecode offsets and bytecode instruction modes. */ +#include lj_bcdef.h + http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_bc.h -- diff --git a/lib/luajit/src/lj_bc.h b/lib/luajit/src/lj_bc.h new file mode 100644 index 000..7436fab --- /dev/null +++ b/lib/luajit/src/lj_bc.h @@ -0,0 +1,261 @@ +/* +** Bytecode instruction format. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_BC_H +#define _LJ_BC_H + +#include lj_def.h +#include lj_arch.h + +/* Bytecode instruction format, 32 bit wide, fields of 8 or 16 bit: +** +** +++++ +** | B | C | A | OP | Format ABC +** +++++ +** |D| A | OP | Format AD +** + +** MSB LSB +** +** In-memory instructions are always stored in host byte order. +*/ + +/* Operand ranges and related constants. */ +#define BCMAX_A0xff +#define BCMAX_B0xff +#define BCMAX_C0xff +#define BCMAX_D0x +#define BCBIAS_J 0x8000 +#define NO_REG BCMAX_A +#define NO_JMP (~(BCPos)0) + +/* Macros to get instruction fields. */ +#define bc_op(i) ((BCOp)((i)0xff)) +#define bc_a(i)((BCReg)(((i)8)0xff)) +#define bc_b(i)((BCReg)((i)24)) +#define bc_c(i)((BCReg)(((i)16)0xff)) +#define bc_d(i)((BCReg)((i)16)) +#define bc_j(i)((ptrdiff_t)bc_d(i)-BCBIAS_J) + +/* Macros to set instruction fields. */ +#define setbc_byte(p, x, ofs) \ + ((uint8_t *)(p))[LJ_ENDIAN_SELECT(ofs, 3-ofs)] = (uint8_t)(x) +#define setbc_op(p, x) setbc_byte(p, (x), 0) +#define setbc_a(p, x) setbc_byte(p, (x), 1) +#define setbc_b(p, x) setbc_byte(p, (x), 3) +#define setbc_c(p, x) setbc_byte(p, (x), 2) +#define setbc_d(p, x) \ + ((uint16_t *)(p))[LJ_ENDIAN_SELECT(1, 0)] = (uint16_t)(x) +#define setbc_j(p, x) setbc_d(p, (BCPos)((int32_t)(x)+BCBIAS_J)) + +/* Macros to compose instructions. */ +#define BCINS_ABC(o, a, b, c) \ + (((BCIns)(o))|((BCIns)(a)8)|((BCIns)(b)24)|((BCIns)(c)16)) +#define BCINS_AD(o, a, d) \ + (((BCIns)(o))|((BCIns)(a)8)|((BCIns)(d)16)) +#define BCINS_AJ(o, a, j) BCINS_AD(o, a, (BCPos)((int32_t)(j)+BCBIAS_J)) + +/* Bytecode instruction definition. Order matters, see below. +** +** (name, filler, Amode, Bmode, Cmode or Dmode, metamethod) +** +** The opcode name suffixes specify the type for RB/RC or RD: +** V = variable slot +** S = string const +** N = number const +** P = primitive type (~itype) +** B = unsigned byte literal +** M = multiple args/results +*/ +#define BCDEF(_) \ + /* Comparison ops. ORDER OPR. */ \ + _(ISLT, var,___,var,lt) \ + _(ISGE, var,___,var,lt) \ + _(ISLE, var,___,var,le) \ + _(ISGT, var,___,var,le) \ + \ + _(ISEQV, var,___,var,eq) \ + _(ISNEV, var,___,var,eq) \ + _(ISEQS, var,___,str,eq) \ + _(ISNES, var,___,str,eq) \ + _(ISEQN, var,___,num,eq) \ + _(ISNEN, var,___,num,eq) \ + _(ISEQP, var,___,pri,eq) \ + _(ISNEP, var,___,pri,eq) \ + \ + /* Unary test and copy ops. */ \ + _(ISTC, dst,___,var,___) \ + _(ISFC, dst,___,var,___) \ + _(IST, ___,___,var,___) \ + _(ISF, ___,___,var,___) \ + \ + /* Unary ops. */ \ + _(MOV, dst,___,var,___) \ + _(NOT, dst,___,var,___) \ + _(UNM, dst,___,var,unm) \ + _(LEN, dst,___,var,len) \ + \ + /* Binary ops. ORDER OPR. VV last, POW must be next. */ \ + _(ADDVN, dst,var,num,add) \ + _(SUBVN, dst,var,num,sub) \ + _(MULVN, dst,var,num,mul) \ + _(DIVVN, dst,var,num,div) \ + _(MODVN, dst,var,num,mod) \ + \ + _(ADDNV, dst,var,num,add) \ + _(SUBNV, dst,var,num,sub) \ + _(MULNV, dst,var,num,mul) \ + _(DIVNV, dst,var,num,div) \ + _(MODNV, dst,var,num,mod) \ + \ + _(ADDVV, dst,var,var,add) \ + _(SUBVV, dst,var,var,sub) \ + _(MULVV, dst,var,var,mul) \ + _(DIVVV, dst,var,var,
[19/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ctype.h -- diff --git a/lib/luajit/src/lj_ctype.h b/lib/luajit/src/lj_ctype.h new file mode 100644 index 000..3df26f0 --- /dev/null +++ b/lib/luajit/src/lj_ctype.h @@ -0,0 +1,461 @@ +/* +** C type management. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_CTYPE_H +#define _LJ_CTYPE_H + +#include lj_obj.h +#include lj_gc.h + +#if LJ_HASFFI + +/* -- C type definitions -- */ + +/* C type numbers. Highest 4 bits of C type info. ORDER CT. */ +enum { + /* Externally visible types. */ + CT_NUM, /* Integer or floating-point numbers. */ + CT_STRUCT, /* Struct or union. */ + CT_PTR, /* Pointer or reference. */ + CT_ARRAY,/* Array or complex type. */ + CT_MAYCONVERT = CT_ARRAY, + CT_VOID, /* Void type. */ + CT_ENUM, /* Enumeration. */ + CT_HASSIZE = CT_ENUM, /* Last type where ct-size holds the actual size. */ + CT_FUNC, /* Function. */ + CT_TYPEDEF, /* Typedef. */ + CT_ATTRIB, /* Miscellaneous attributes. */ + /* Internal element types. */ + CT_FIELD,/* Struct/union field or function parameter. */ + CT_BITFIELD, /* Struct/union bitfield. */ + CT_CONSTVAL, /* Constant value. */ + CT_EXTERN, /* External reference. */ + CT_KW/* Keyword. */ +}; + +LJ_STATIC_ASSERT(((int)CT_PTR (int)CT_ARRAY) == CT_PTR); +LJ_STATIC_ASSERT(((int)CT_STRUCT (int)CT_ARRAY) == CT_STRUCT); + +/* +** -- info +** |type flags... A cid | size | sib | next | name | +** +++---+---+---+-- +** |NUM BFvcUL.. A | size | | type | | +** |STRUCT..vcU..V A | size | field | name? | name? | +** |PTR ..vcR... A cid | size | | type | | +** |ARRAY VCvc...V A cid | size | | type | | +** |VOID ..vc A | size | | type | | +** |ENUMA cid | size | const | name? | name? | +** |FUNC VS.. cc cid | nargs | field | name? | name? | +** |TYPEDEF cid || | name | name | +** |ATTRIBattrnum cid | attr | sib? | type? | | +** |FIELD cid | offset | field | | name? | +** |BITFIELD B.vcU csz bsz pos | offset | field | | name? | +** |CONSTVAL c cid | value | const | name | name | +** |EXTERN cid || sib? | name | name | +** |KW tok | size | | name | name | +** +++---+---+---+-- +**^^ ^^--- bits used for C type conversion dispatch +*/ + +/* C type info flags. TFFA */ +#define CTF_BOOL 0x0800u /* Boolean: NUM, BITFIELD. */ +#define CTF_FP 0x0400u /* Floating-point: NUM. */ +#define CTF_CONST 0x0200u /* Const qualifier. */ +#define CTF_VOLATILE 0x0100u /* Volatile qualifier. */ +#define CTF_UNSIGNED 0x0080u /* Unsigned: NUM, BITFIELD. */ +#define CTF_LONG 0x0040u /* Long: NUM. */ +#define CTF_VLA0x0010u /* Variable-length: ARRAY, STRUCT. */ +#define CTF_REF0x0080u /* Reference: PTR. */ +#define CTF_VECTOR 0x0800u /* Vector: ARRAY. */ +#define CTF_COMPLEX0x0400u /* Complex: ARRAY. */ +#define CTF_UNION 0x0080u /* Union: STRUCT. */ +#define CTF_VARARG 0x0080u /* Vararg: FUNC. */ +#define CTF_SSEREGPARM 0x0040u /* SSE register parameters: FUNC. */ + +#define CTF_QUAL (CTF_CONST|CTF_VOLATILE) +#define CTF_ALIGN (CTMASK_ALIGNCTSHIFT_ALIGN) +#define CTF_UCHAR ((char)-1 0 ? CTF_UNSIGNED : 0) + +/* Flags used in parser. .F.Ammvf cp-attr */ +#define CTFP_ALIGNED 0x0001u /* cp-attr + ALIGN */ +#define CTFP_PACKED0x0002u /* cp-attr */ +/*...C...f cp-fattr */ +#define CTFP_CCONV 0x0001u /* cp-fattr + CCONV/[SSE]REGPARM */ + +/* C type info bitfields. */ +#define CTMASK_CID 0xu /* Max. 65536 type IDs. */ +#define CTMASK_NUM 0xf000u /* Max. 16 type numbers. */ +#define CTSHIFT_NUM28 +#define CTMASK_ALIGN 15 /* Max. alignment is 2^15. */ +#define CTSHIFT_ALIGN 16 +#define CTMASK_ATTRIB 255 /* Max. 256 attributes. */ +#define CTSHIFT_ATTRIB 16 +#define CTMASK_CCONV 3 /* Max. 4 calling conventions. */ +#define CTSHIFT_CCONV 16 +#define CTMASK_REGPARM 3 /* Max. 0-3 regparms. */ +#define CTSHIFT_REGPARM18 +/* Bitfields only used in parser. */ +#define CTMASK_VSIZEP 15
[55/62] [abbrv] trafficserver git commit: TS-3798: Copy server session sharing pool to local HttpSM configuration.
TS-3798: Copy server session sharing pool to local HttpSM configuration. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/a90403e9 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/a90403e9 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/a90403e9 Branch: refs/heads/6.0.x Commit: a90403e9f6220f5511cb9d1523a4db8c27a9316f Parents: 0b160a7 Author: Alan M. Carroll a...@apache.org Authored: Fri Jul 24 15:57:57 2015 -0500 Committer: Alan M. Carroll a...@apache.org Committed: Fri Jul 24 15:57:57 2015 -0500 -- proxy/http/HttpConfig.cc | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a90403e9/proxy/http/HttpConfig.cc -- diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc index 27b6508..646173d 100644 --- a/proxy/http/HttpConfig.cc +++ b/proxy/http/HttpConfig.cc @@ -1207,6 +1207,7 @@ HttpConfig::reconfigure() } params-oride.server_session_sharing_match = m_master.oride.server_session_sharing_match; + params-server_session_sharing_pool = m_master.server_session_sharing_pool; params-oride.keep_alive_post_out = m_master.oride.keep_alive_post_out; params-oride.keep_alive_no_activity_timeout_in = m_master.oride.keep_alive_no_activity_timeout_in;
[32/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/jit/dis_x86.lua -- diff --git a/lib/luajit/src/jit/dis_x86.lua b/lib/luajit/src/jit/dis_x86.lua new file mode 100644 index 000..078d609 --- /dev/null +++ b/lib/luajit/src/jit/dis_x86.lua @@ -0,0 +1,836 @@ + +-- LuaJIT x86/x64 disassembler module. +-- +-- Copyright (C) 2005-2015 Mike Pall. All rights reserved. +-- Released under the MIT license. See Copyright Notice in luajit.h + +-- This is a helper module used by the LuaJIT machine code dumper module. +-- +-- Sending small code snippets to an external disassembler and mixing the +-- output with our own stuff was too fragile. So I had to bite the bullet +-- and write yet another x86 disassembler. Oh well ... +-- +-- The output format is very similar to what ndisasm generates. But it has +-- been developed independently by looking at the opcode tables from the +-- Intel and AMD manuals. The supported instruction set is quite extensive +-- and reflects what a current generation Intel or AMD CPU implements in +-- 32 bit and 64 bit mode. Yes, this includes MMX, SSE, SSE2, SSE3, SSSE3, +-- SSE4.1, SSE4.2, SSE4a and even privileged and hypervisor (VMX/SVM) +-- instructions. +-- +-- Notes: +-- * The (useless) a16 prefix, 3DNow and pre-586 opcodes are unsupported. +-- * No attempt at optimization has been made -- it's fast enough for my needs. +-- * The public API may change when more architectures are added. +-- + +local type = type +local sub, byte, format = string.sub, string.byte, string.format +local match, gmatch, gsub = string.match, string.gmatch, string.gsub +local lower, rep = string.lower, string.rep + +-- Map for 1st opcode byte in 32 bit mode. Ugly? Well ... read on. +local map_opc1_32 = { +--0x +[0]=addBmr,addVmr,addBrm,addVrm,addBai,addVai,push es,pop es, +orBmr,orVmr,orBrm,orVrm,orBai,orVai,push cs,opc2*, +--1x +adcBmr,adcVmr,adcBrm,adcVrm,adcBai,adcVai,push ss,pop ss, +sbbBmr,sbbVmr,sbbBrm,sbbVrm,sbbBai,sbbVai,push ds,pop ds, +--2x +andBmr,andVmr,andBrm,andVrm,andBai,andVai,es:seg,daa, +subBmr,subVmr,subBrm,subVrm,subBai,subVai,cs:seg,das, +--3x +xorBmr,xorVmr,xorBrm,xorVrm,xorBai,xorVai,ss:seg,aaa, +cmpBmr,cmpVmr,cmpBrm,cmpVrm,cmpBai,cmpVai,ds:seg,aas, +--4x +incVR,incVR,incVR,incVR,incVR,incVR,incVR,incVR, +decVR,decVR,decVR,decVR,decVR,decVR,decVR,decVR, +--5x +pushUR,pushUR,pushUR,pushUR,pushUR,pushUR,pushUR,pushUR, +popUR,popUR,popUR,popUR,popUR,popUR,popUR,popUR, +--6x +sz*pushaw,pusha,sz*popaw,popa,boundVrm,arplWmr, +fs:seg,gs:seg,o16:,a16, +pushUi,imulVrmi,pushBs,imulVrms, +insb,insVS,outsb,outsVS, +--7x +joBj,jnoBj,jbBj,jnbBj,jzBj,jnzBj,jbeBj,jaBj, +jsBj,jnsBj,jpeBj,jpoBj,jlBj,jgeBj,jleBj,jgBj, +--8x +arith!Bmi,arith!Vmi,arith!Bmi,arith!Vms, +testBmr,testVmr,xchgBrm,xchgVrm, +movBmr,movVmr,movBrm,movVrm, +movVmg,leaVrm,movWgm,popUm, +--9x +nop*xchgVaR|pause|xchgWaR|repne nop,xchgVaR,xchgVaR,xchgVaR, +xchgVaR,xchgVaR,xchgVaR,xchgVaR, +sz*cbw,cwde,cdqe,sz*cwd,cdq,cqo,call farViw,wait, +sz*pushfw,pushf,sz*popfw,popf,sahf,lahf, +--Ax +movBao,movVao,movBoa,movVoa, +movsb,movsVS,cmpsb,cmpsVS, +testBai,testVai,stosb,stosVS, +lodsb,lodsVS,scasb,scasVS, +--Bx +movBRi,movBRi,movBRi,movBRi,movBRi,movBRi,movBRi,movBRi, +movVRI,movVRI,movVRI,movVRI,movVRI,movVRI,movVRI,movVRI, +--Cx +shift!Bmu,shift!Vmu,retBw,ret,$lesVrm,$ldsVrm,movBmi,movVmi, +enterBwu,leave,retfBw,retf,int3,intBu,into,iretVS, +--Dx +shift!Bm1,shift!Vm1,shift!Bmc,shift!Vmc,aamBu,aadBu,salc,xlatb, +fp*0,fp*1,fp*2,fp*3,fp*4,fp*5,fp*6,fp*7, +--Ex +loopneBj,loopeBj,loopBj,sz*jcxzBj,jecxzBj,jrcxzBj, +inBau,inVau,outBua,outVua, +callVj,jmpVj,jmp farViw,jmpBj,inBad,inVad,outBda,outVda, +--Fx +lock:,int1,repne:rep,rep:,hlt,cmc,testb!Bm,testv!Vm, +clc,stc,cli,sti,cld,std,incb!Bm,incd!Vm, +} +assert(#map_opc1_32 == 255) + +-- Map for 1st opcode byte in 64 bit mode (overrides only). +local map_opc1_64 = setmetatable({ + [0x06]=false, [0x07]=false, [0x0e]=false, + [0x16]=false, [0x17]=false, [0x1e]=false, [0x1f]=false, + [0x27]=false, [0x2f]=false, [0x37]=false, [0x3f]=false, + [0x60]=false, [0x61]=false, [0x62]=false, [0x63]=movsxdVrDmt, [0x67]=a32:, + [0x40]=rex*, [0x41]=rex*b, [0x42]=rex*x, [0x43]=rex*xb, + [0x44]=rex*r, [0x45]=rex*rb, [0x46]=rex*rx, [0x47]=rex*rxb, + [0x48]=rex*w, [0x49]=rex*wb, [0x4a]=rex*wx, [0x4b]=rex*wxb, + [0x4c]=rex*wr, [0x4d]=rex*wrb, [0x4e]=rex*wrx, [0x4f]=rex*wrxb, + [0x82]=false, [0x9a]=false, [0xc4]=false, [0xc5]=false, [0xce]=false, + [0xd4]=false, [0xd5]=false, [0xd6]=false, [0xea]=false, +}, { __index = map_opc1_32 }) + +-- Map for 2nd opcode byte (0F xx). True CISC hell. Hey, I told you. +-- Prefix dependent MMX/SSE opcodes: (none)|rep|o16|repne, -|F3|66|F2
[27/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_arm.h -- diff --git a/lib/luajit/src/lj_asm_arm.h b/lib/luajit/src/lj_asm_arm.h new file mode 100644 index 000..9e4cf43 --- /dev/null +++ b/lib/luajit/src/lj_asm_arm.h @@ -0,0 +1,2361 @@ +/* +** ARM IR assembler (SSA IR - machine code). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* -- Register allocator extensions --- */ + +/* Allocate a register with a hint. */ +static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) +{ + Reg r = IR(ref)-r; + if (ra_noreg(r)) { +if (!ra_hashint(r) !iscrossref(as, ref)) + ra_sethint(IR(ref)-r, hint); /* Propagate register hint. */ +r = ra_allocref(as, ref, allow); + } + ra_noweak(as, r); + return r; +} + +/* Allocate a scratch register pair. */ +static Reg ra_scratchpair(ASMState *as, RegSet allow) +{ + RegSet pick1 = as-freeset allow; + RegSet pick2 = pick1 (pick1 1) RSET_GPREVEN; + Reg r; + if (pick2) { +r = rset_picktop(pick2); + } else { +RegSet pick = pick1 (allow 1) RSET_GPREVEN; +if (pick) { + r = rset_picktop(pick); + ra_restore(as, regcost_ref(as-cost[r+1])); +} else { + pick = pick1 (allow 1) RSET_GPRODD; + if (pick) { + r = ra_restore(as, regcost_ref(as-cost[rset_picktop(pick)-1])); + } else { + r = ra_evict(as, allow (allow 1) RSET_GPREVEN); + ra_restore(as, regcost_ref(as-cost[r+1])); + } +} + } + lua_assert(rset_test(RSET_GPREVEN, r)); + ra_modified(as, r); + ra_modified(as, r+1); + RA_DBGX((as, scratchpair$r $r, r, r+1)); + return r; +} + +#if !LJ_SOFTFP +/* Allocate two source registers for three-operand instructions. */ +static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) +{ + IRIns *irl = IR(ir-op1), *irr = IR(ir-op2); + Reg left = irl-r, right = irr-r; + if (ra_hasreg(left)) { +ra_noweak(as, left); +if (ra_noreg(right)) + right = ra_allocref(as, ir-op2, rset_exclude(allow, left)); +else + ra_noweak(as, right); + } else if (ra_hasreg(right)) { +ra_noweak(as, right); +left = ra_allocref(as, ir-op1, rset_exclude(allow, right)); + } else if (ra_hashint(right)) { +right = ra_allocref(as, ir-op2, allow); +left = ra_alloc1(as, ir-op1, rset_exclude(allow, right)); + } else { +left = ra_allocref(as, ir-op1, allow); +right = ra_alloc1(as, ir-op2, rset_exclude(allow, left)); + } + return left | (right 8); +} +#endif + +/* -- Guard handling -- */ + +/* Generate an exit stub group at the bottom of the reserved MCode memory. */ +static MCode *asm_exitstub_gen(ASMState *as, ExitNo group) +{ + MCode *mxp = as-mcbot; + int i; + if (mxp + 4*4+4*EXITSTUBS_PER_GROUP = as-mctop) +asm_mclimit(as); + /* str lr, [sp]; bl -vm_exit_handler; .long DISPATCH_address, group. */ + *mxp++ = ARMI_STR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_LR)|ARMF_N(RID_SP); + *mxp = ARMI_BL|MCode *)(void *)lj_vm_exit_handler-mxp)-2)0x00ffu); + mxp++; + *mxp++ = (MCode)i32ptr(J2GG(as-J)-dispatch); /* DISPATCH address */ + *mxp++ = group*EXITSTUBS_PER_GROUP; + for (i = 0; i EXITSTUBS_PER_GROUP; i++) +*mxp++ = ARMI_B|((-6-i)0x00ffu); + lj_mcode_sync(as-mcbot, mxp); + lj_mcode_commitbot(as-J, mxp); + as-mcbot = mxp; + as-mclim = as-mcbot + MCLIM_REDZONE; + return mxp - EXITSTUBS_PER_GROUP; +} + +/* Setup all needed exit stubs. */ +static void asm_exitstub_setup(ASMState *as, ExitNo nexits) +{ + ExitNo i; + if (nexits = EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) +lj_trace_err(as-J, LJ_TRERR_SNAPOV); + for (i = 0; i (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++) +if (as-J-exitstubgroup[i] == NULL) + as-J-exitstubgroup[i] = asm_exitstub_gen(as, i); +} + +/* Emit conditional branch to exit for guard. */ +static void asm_guardcc(ASMState *as, ARMCC cc) +{ + MCode *target = exitstub_addr(as-J, as-snapno); + MCode *p = as-mcp; + if (LJ_UNLIKELY(p == as-invmcp)) { +as-loopinv = 1; +*p = ARMI_BL | ((target-p-2) 0x00ffu); +emit_branch(as, ARMF_CC(ARMI_B, cc^1), p+1); +return; + } + emit_branch(as, ARMF_CC(ARMI_BL, cc), target); +} + +/* -- Operand fusion -- */ + +/* Limit linear search to this distance. Avoids O(n^2) behavior. */ +#define CONFLICT_SEARCH_LIM31 + +/* Check if there's no conflicting instruction between curins and ref. */ +static int noconflict(ASMState *as, IRRef ref, IROp conflict) +{ + IRIns *ir = as-ir; + IRRef i = as-curins; + if (i ref + CONFLICT_SEARCH_LIM) +return 0; /* Give up, ref is too far away. */ + while (--i ref) +if (ir[i].o == conflict) + return 0; /* Conflict found. */ + return 1; /* Ok, no conflict. */ +} + +/* Fuse the array base of colocated arrays. */
[40/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/ext_ffi_tutorial.html -- diff --git a/lib/luajit/doc/ext_ffi_tutorial.html b/lib/luajit/doc/ext_ffi_tutorial.html new file mode 100644 index 000..8f99bfb --- /dev/null +++ b/lib/luajit/doc/ext_ffi_tutorial.html @@ -0,0 +1,601 @@ +!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN http://www.w3.org/TR/html4/strict.dtd; +html +head +titleFFI Tutorial/title +meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 +meta name=Author content=Mike Pall +meta name=Copyright content=Copyright (C) 2005-2015, Mike Pall +meta name=Language content=en +link rel=stylesheet type=text/css href=bluequad.css media=screen +link rel=stylesheet type=text/css href=bluequad-print.css media=print +style type=text/css +table.idiomtable { font-size: 90%; line-height: 1.2; } +table.idiomtable tt { font-size: 100%; } +table.idiomtable td { vertical-align: top; } +tr.idiomhead td { font-weight: bold; } +td.idiomlua b { font-weight: normal; color: #2142bf; } +/style +/head +body +div id=site +a href=http://luajit.org;spanLuaspan id=logoJIT/span/span/a +/div +div id=head +h1FFI Tutorial/h1 +/div +div id=nav +ulli +a href=luajit.htmlLuaJIT/a +ulli +a href=http://luajit.org/download.html;Download span class=extraquo;/span/a +/lili +a href=install.htmlInstallation/a +/lili +a href=running.htmlRunning/a +/li/ul +/lili +a href=extensions.htmlExtensions/a +ulli +a href=ext_ffi.htmlFFI Library/a +ulli +a class=current href=ext_ffi_tutorial.htmlFFI Tutorial/a +/lili +a href=ext_ffi_api.htmlffi.* API/a +/lili +a href=ext_ffi_semantics.htmlFFI Semantics/a +/li/ul +/lili +a href=ext_jit.htmljit.* Library/a +/lili +a href=ext_c_api.htmlLua/C API/a +/li/ul +/lili +a href=status.htmlStatus/a +ulli +a href=changes.htmlChanges/a +/li/ul +/lili +a href=faq.htmlFAQ/a +/lili +a href=http://luajit.org/performance.html;Performance span class=extraquo;/span/a +/lili +a href=http://wiki.luajit.org/;Wiki span class=extraquo;/span/a +/lili +a href=http://luajit.org/list.html;Mailing List span class=extraquo;/span/a +/li/ul +/div +div id=main +p +This page is intended to give you an overview of the features of the FFI +library by presenting a few use cases and guidelines. +/p +p +This page makes no attempt to explain all of the FFI library, though. +You'll want to have a look at the a href=ext_ffi_api.htmlffi.* API +function reference/a and the a href=ext_ffi_semantics.htmlFFI +semantics/a to learn more. +/p + +h2 id=loadLoading the FFI Library/h2 +p +The FFI library is built into LuaJIT by default, but it's not loaded +and initialized by default. The suggested way to use the FFI library +is to add the following to the start of every Lua file that needs one +of its functions: +/p +pre class=code +local ffi = require(ffi) +/pre +p +Please note this doesn't define an ttffi/tt variable in the table +of globals mdash; you really need to use the local variable. The +ttrequire/tt function ensures the library is only loaded once. +/p +p style=font-size: 8pt; +Note: If you want to experiment with the FFI from the interactive prompt +of the command line executable, omit the ttlocal/tt, as it doesn't +preserve local variables across lines. +/p + +h2 id=sleepAccessing Standard System Functions/h2 +p +The following code explains how to access standard system functions. +We slowly print two lines of dots by sleeping for 10nbsp;milliseconds +after each dot: +/p +pre class=code mark +span class=codemarknbsp; +#9312; + + + + + +#9313; +#9314; +#9315; + + + +#9316; + + + + + +#9317;/spanlocal ffi = require(ffi) +ffi.cdef[[ +span style=color:#00a000;void Sleep(int ms); +int poll(struct pollfd *fds, unsigned long nfds, int timeout);/span +]] + +local sleep +if ffi.os == Windows then + function sleep(s) +ffi.C.Sleep(s*1000) + end +else + function sleep(s) +ffi.C.poll(nil, 0, s*1000) + end +end + +for i=1,160 do + io.write(.); io.flush() + sleep(0.01) +end +io.write(\n) +/pre +p +Here's the step-by-step explanation: +/p +p +span class=mark#9312;/span This defines the +Cnbsp;library functions we're going to use. The part inside the +double-brackets (in green) is just standard Cnbsp;syntax. You can +usually get this info from the Cnbsp;header files or the +documentation provided by each Cnbsp;library or Cnbsp;compiler. +/p +p +span class=mark#9313;/span The difficulty we're +facing here, is that there are different standards to choose from. +Windows has a simple ttSleep()/tt function. On other systems there +are a variety of functions available to achieve sub-second sleeps, but +with no clear consensus. Thankfully ttpoll()/tt can be used for +this task, too, and it's present on most non-Windows systems. The +check for ttffi.os/tt makes sure we use the Windows-specific +function only on Windows systems. +/p +p +span class=mark#9314;/span Here we're wrapping the +call to the Cnbsp;function in a Lua function.
[57/62] [abbrv] trafficserver git commit: Clang-format. briang what is the Jira for this??
Clang-format. briang what is the Jira for this?? Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/95f45d4a Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/95f45d4a Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/95f45d4a Branch: refs/heads/6.0.x Commit: 95f45d4a79368ad7c7a236238ee5af660ae826a7 Parents: aa59a0d Author: Leif Hedstrom zw...@apache.org Authored: Mon Jul 27 09:58:00 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Mon Jul 27 09:58:00 2015 -0600 -- proxy/logging/LogAccessHttp.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/95f45d4a/proxy/logging/LogAccessHttp.cc -- diff --git a/proxy/logging/LogAccessHttp.cc b/proxy/logging/LogAccessHttp.cc index fe1b61c..ec0cc7f 100644 --- a/proxy/logging/LogAccessHttp.cc +++ b/proxy/logging/LogAccessHttp.cc @@ -916,8 +916,8 @@ int LogAccessHttp::marshal_proxy_req_server_port(char *buf) { if (buf) { - uint16_t port = ntohs(m_http_sm-t_state.current.server != NULL ? m_http_sm-t_state.current.server-dst_addr.port() : 0); - marshal_int(buf, port); +uint16_t port = ntohs(m_http_sm-t_state.current.server != NULL ? m_http_sm-t_state.current.server-dst_addr.port() : 0); +marshal_int(buf, port); } return INK_MIN_ALIGN; }
[18/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_emit_ppc.h -- diff --git a/lib/luajit/src/lj_emit_ppc.h b/lib/luajit/src/lj_emit_ppc.h new file mode 100644 index 000..14edf00 --- /dev/null +++ b/lib/luajit/src/lj_emit_ppc.h @@ -0,0 +1,238 @@ +/* +** PPC instruction emitter. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* -- Emit basic instructions - */ + +static void emit_tab(ASMState *as, PPCIns pi, Reg rt, Reg ra, Reg rb) +{ + *--as-mcp = pi | PPCF_T(rt) | PPCF_A(ra) | PPCF_B(rb); +} + +#define emit_asb(as, pi, ra, rs, rb) emit_tab(as, (pi), (rs), (ra), (rb)) +#define emit_as(as, pi, ra, rs)emit_tab(as, (pi), (rs), (ra), 0) +#define emit_ab(as, pi, ra, rb)emit_tab(as, (pi), 0, (ra), (rb)) + +static void emit_tai(ASMState *as, PPCIns pi, Reg rt, Reg ra, int32_t i) +{ + *--as-mcp = pi | PPCF_T(rt) | PPCF_A(ra) | (i 0x); +} + +#define emit_ti(as, pi, rt, i) emit_tai(as, (pi), (rt), 0, (i)) +#define emit_ai(as, pi, ra, i) emit_tai(as, (pi), 0, (ra), (i)) +#define emit_asi(as, pi, ra, rs, i)emit_tai(as, (pi), (rs), (ra), (i)) + +#define emit_fab(as, pi, rf, ra, rb) \ + emit_tab(as, (pi), (rf)31, (ra)31, (rb)31) +#define emit_fb(as, pi, rf, rb)emit_tab(as, (pi), (rf)31, 0, (rb)31) +#define emit_fac(as, pi, rf, ra, rc) \ + emit_tab(as, (pi) | PPCF_C((rc) 31), (rf)31, (ra)31, 0) +#define emit_facb(as, pi, rf, ra, rc, rb) \ + emit_tab(as, (pi) | PPCF_C((rc) 31), (rf)31, (ra)31, (rb)31) +#define emit_fai(as, pi, rf, ra, i)emit_tai(as, (pi), (rf)31, (ra), (i)) + +static void emit_rot(ASMState *as, PPCIns pi, Reg ra, Reg rs, +int32_t n, int32_t b, int32_t e) +{ + *--as-mcp = pi | PPCF_T(rs) | PPCF_A(ra) | PPCF_B(n) | + PPCF_MB(b) | PPCF_ME(e); +} + +static void emit_slwi(ASMState *as, Reg ra, Reg rs, int32_t n) +{ + lua_assert(n = 0 n 32); + emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31-n); +} + +static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n) +{ + lua_assert(n = 0 n 32); + emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31); +} + +/* -- Emit loads/stores --- */ + +/* Prefer rematerialization of BASE/L from global_State over spills. */ +#define emit_canremat(ref) ((ref) = REF_BASE) + +/* Try to find a one step delta relative to another constant. */ +static int emit_kdelta1(ASMState *as, Reg t, int32_t i) +{ + RegSet work = ~as-freeset RSET_GPR; + while (work) { +Reg r = rset_picktop(work); +IRRef ref = regcost_ref(as-cost[r]); +lua_assert(r != t); +if (ref ASMREF_L) { + int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)-i); + if (checki16(delta)) { + emit_tai(as, PPCI_ADDI, t, r, delta); + return 1; + } +} +rset_clear(work, r); + } + return 0; /* Failed. */ +} + +/* Load a 32 bit constant into a GPR. */ +static void emit_loadi(ASMState *as, Reg r, int32_t i) +{ + if (checki16(i)) { +emit_ti(as, PPCI_LI, r, i); + } else { +if ((i 0x)) { + int32_t jgl = i32ptr(J2G(as-J)); + if ((uint32_t)(i-jgl) 65536) { + emit_tai(as, PPCI_ADDI, r, RID_JGL, i-jgl-32768); + return; + } else if (emit_kdelta1(as, r, i)) { + return; + } + emit_asi(as, PPCI_ORI, r, r, i); +} +emit_ti(as, PPCI_LIS, r, (i 16)); + } +} + +#define emit_loada(as, r, addr)emit_loadi(as, (r), i32ptr((addr))) + +static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); + +/* Get/set from constant pointer. */ +static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow) +{ + int32_t jgl = i32ptr(J2G(as-J)); + int32_t i = i32ptr(p); + Reg base; + if ((uint32_t)(i-jgl) 65536) { +i = i-jgl-32768; +base = RID_JGL; + } else { +base = ra_allock(as, i-(int16_t)i, allow); + } + emit_tai(as, pi, r, base, i); +} + +#define emit_loadn(as, r, tv) \ + emit_lsptr(as, PPCI_LFD, ((r) 31), (void *)(tv), RSET_GPR) + +/* Get/set global_State fields. */ +static void emit_lsglptr(ASMState *as, PPCIns pi, Reg r, int32_t ofs) +{ + emit_tai(as, pi, r, RID_JGL, ofs-32768); +} + +#define emit_getgl(as, r, field) \ + emit_lsglptr(as, PPCI_LWZ, (r), (int32_t)offsetof(global_State, field)) +#define emit_setgl(as, r, field) \ + emit_lsglptr(as, PPCI_STW, (r), (int32_t)offsetof(global_State, field)) + +/* Trace number is determined from per-trace exit stubs. */ +#define emit_setvmstate(as, i) UNUSED(i) + +/* -- Emit control-flow instructions -- */ + +/* Label for internal jumps. */ +typedef MCode *MCLabel; + +/* Return label pointing to current PC. */ +#define emit_label(as) ((as)-mcp) + +static void emit_condbranch(ASMState *as, PPCIns pi, PPCCC cc, MCode *target) +{ +
[49/62] [abbrv] trafficserver git commit: TS-3030 Remove the Makefile targets / ops
TS-3030 Remove the Makefile targets / ops Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/a43a1249 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/a43a1249 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/a43a1249 Branch: refs/heads/6.0.x Commit: a43a1249cc26074238c3b94f623d690181d99176 Parents: 3678a6e Author: Leif Hedstrom zw...@apache.org Authored: Fri Jul 24 09:45:23 2015 +0200 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 09:45:29 2015 +0200 -- Makefile.am | 7 +-- lib/Makefile.am | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a43a1249/Makefile.am -- diff --git a/Makefile.am b/Makefile.am index 078cfc1..2b6cbdd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,7 +68,6 @@ asf-dist-rc: asf-distdir asf-distdir: @$(am__remove_distdir) test -d .git git clone . $(distdir) - cd $(distdir) git submodule update --init autoreconf -i $(RM) -r -- $(distdir)/autom4te.cache $(distdir)/ci `find $(distdir) -name .git -o -name .gitignore -o -name .gitmodules` asf-dist-sign: asf-dist @@ -99,9 +98,6 @@ install-data-hook: rat: java -jar $(top_srcdir)/ci/apache-rat-0.11-SNAPSHOT.jar -E $(top_srcdir)/ci/rat-regex.txt -d $(top_srcdir) -submodules: - git submodule update --init - clang-format: for f in `find $(top_srcdir) -iname \*.[ch] -o -iname \*.cc | fgrep -v -e lib/luajit -e lib/tsconfig`; do \ echo $$f; clang-format -i $$f; done @@ -119,9 +115,8 @@ help: echo 'rel-candidaterecreate a signed relelease candidate source package and a signed git tag' \ echo 'distcheckverify dist by performing VPATH build and then distclean' \ echo 'rat produce a RAT licence compliance report of the source' \ - echo 'submodules update the git submodules' \ echo 'doxygen generate doxygen docs in doc/html dir' \ - echo 'clang-format run clang-format over most C and C++ files (not git submodules/trees)' \ + echo 'clang-format run clang-format over most C and C++ files (not git subtrees)' \ echo 'help display this list of make targets' \ echo 'install install by copying the built files to system-wide dirs' \ echo 'install-stripsame as install but then strips debugging symbols' \ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/a43a1249/lib/Makefile.am -- diff --git a/lib/Makefile.am b/lib/Makefile.am index 43c0134..6f3bf23 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -45,7 +45,6 @@ LUA_CFLAGS=$(CFLAGS) $(LUAJIT_CFLAGS) -DLUA_COMPAT_ALL -DLUA_USE_POSIX -DLUA_USE all-local: @echo Making all in luajit - test -d $(top_srcdir)/$(subdir)/luajit/src || (cd $(top_srcdir) git submodule update --init) test -d $(top_builddir)/$(subdir)/luajit/src || cp -rf $(srcdir)/luajit $(top_builddir)/$(subdir)/ cd luajit $(MAKE) $(AM_MAKEFLAGS) BUILDMODE=static PREFIX=$(prefix) CC=$(CC) \ CFLAGS=$(LUA_CFLAGS) LDFLAGS=@LUA_LDFLAGS@
[07/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_traceerr.h -- diff --git a/lib/luajit/src/lj_traceerr.h b/lib/luajit/src/lj_traceerr.h new file mode 100644 index 000..9bef117 --- /dev/null +++ b/lib/luajit/src/lj_traceerr.h @@ -0,0 +1,61 @@ +/* +** Trace compiler error messages. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* This file may be included multiple times with different TREDEF macros. */ + +/* Recording. */ +TREDEF(RECERR, error thrown or hook called during recording) +TREDEF(TRACEOV,trace too long) +TREDEF(STACKOV,trace too deep) +TREDEF(SNAPOV, too many snapshots) +TREDEF(BLACKL, blacklisted) +TREDEF(NYIBC, NYI: bytecode %d) + +/* Recording loop ops. */ +TREDEF(LLEAVE, leaving loop in root trace) +TREDEF(LINNER, inner loop in root trace) +TREDEF(LUNROLL,loop unroll limit reached) + +/* Recording calls/returns. */ +TREDEF(BADTYPE,bad argument type) +TREDEF(CJITOFF,JIT compilation disabled for function) +TREDEF(CUNROLL,call unroll limit reached) +TREDEF(DOWNREC,down-recursion, restarting) +TREDEF(NYICF, NYI: C function %p) +TREDEF(NYIFF, NYI: FastFunc %s) +TREDEF(NYIFFU, NYI: unsupported variant of FastFunc %s) +TREDEF(NYIRETL,NYI: return to lower frame) + +/* Recording indexed load/store. */ +TREDEF(STORENN,store with nil or NaN key) +TREDEF(NOMM, missing metamethod) +TREDEF(IDXLOOP,looping index lookup) +TREDEF(NYITMIX,NYI: mixed sparse/dense table) + +/* Recording C data operations. */ +TREDEF(NOCACHE,symbol not in cache) +TREDEF(NYICONV,NYI: unsupported C type conversion) +TREDEF(NYICALL,NYI: unsupported C function type) + +/* Optimizations. */ +TREDEF(GFAIL, guard would always fail) +TREDEF(PHIOV, too many PHIs) +TREDEF(TYPEINS,persistent type instability) + +/* Assembler. */ +TREDEF(MCODEAL,failed to allocate mcode memory) +TREDEF(MCODEOV,machine code too long) +TREDEF(MCODELM,hit mcode limit (retrying)) +TREDEF(SPILLOV,too many spill slots) +TREDEF(BADRA, inconsistent register allocation) +TREDEF(NYIIR, NYI: cannot assemble IR instruction %d) +TREDEF(NYIPHI, NYI: PHI shuffling too complex) +TREDEF(NYICOAL,NYI: register coalescing too complex) + +#undef TREDEF + +/* Detecting unused error messages: + awk -F, '/^TREDEF/ { gsub(/TREDEF./, ); printf grep -q LJ_TRERR_%s *.[ch] || echo %s\n, $1, $1}' lj_traceerr.h | sh +*/ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_udata.c -- diff --git a/lib/luajit/src/lj_udata.c b/lib/luajit/src/lj_udata.c new file mode 100644 index 000..d401a3d --- /dev/null +++ b/lib/luajit/src/lj_udata.c @@ -0,0 +1,34 @@ +/* +** Userdata handling. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_udata_c +#define LUA_CORE + +#include lj_obj.h +#include lj_gc.h +#include lj_udata.h + +GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env) +{ + GCudata *ud = lj_mem_newt(L, sizeof(GCudata) + sz, GCudata); + global_State *g = G(L); + newwhite(g, ud); /* Not finalized. */ + ud-gct = ~LJ_TUDATA; + ud-udtype = UDTYPE_USERDATA; + ud-len = sz; + /* NOBARRIER: The GCudata is new (marked white). */ + setgcrefnull(ud-metatable); + setgcref(ud-env, obj2gco(env)); + /* Chain to userdata list (after main thread). */ + setgcrefr(ud-nextgc, mainthread(g)-nextgc); + setgcref(mainthread(g)-nextgc, obj2gco(ud)); + return ud; +} + +void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud) +{ + lj_mem_free(g, ud, sizeudata(ud)); +} + http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_udata.h -- diff --git a/lib/luajit/src/lj_udata.h b/lib/luajit/src/lj_udata.h new file mode 100644 index 000..676e970 --- /dev/null +++ b/lib/luajit/src/lj_udata.h @@ -0,0 +1,14 @@ +/* +** Userdata handling. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_UDATA_H +#define _LJ_UDATA_H + +#include lj_obj.h + +LJ_FUNC GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env); +LJ_FUNC void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud); + +#endif http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_vm.h -- diff --git a/lib/luajit/src/lj_vm.h b/lib/luajit/src/lj_vm.h new file mode 100644 index 000..036cabc --- /dev/null +++ b/lib/luajit/src/lj_vm.h @@ -0,0 +1,116 @@ +/* +** Assembler VM interface definitions. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_VM_H +#define _LJ_VM_H + +#include lj_obj.h + +/* Entry points for ASM parts of
[51/62] [abbrv] trafficserver git commit: TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition
TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/bfddad17 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/bfddad17 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/bfddad17 Branch: refs/heads/6.0.x Commit: bfddad17cec3ef9facf406f74c1963cb80e56d71 Parents: c14f874 Author: Leif Hedstrom zw...@apache.org Authored: Fri Jul 24 01:52:53 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 01:52:53 2015 -0600 -- .../experimental/cache_promote/cache_promote.cc | 25 +++- 1 file changed, 19 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/bfddad17/plugins/experimental/cache_promote/cache_promote.cc -- diff --git a/plugins/experimental/cache_promote/cache_promote.cc b/plugins/experimental/cache_promote/cache_promote.cc index 9c2edb6..dab961d 100644 --- a/plugins/experimental/cache_promote/cache_promote.cc +++ b/plugins/experimental/cache_promote/cache_promote.cc @@ -34,6 +34,8 @@ static const char *PLUGIN_NAME = cache_promote; +TSCont gNocacheCont; + // // Note that all options for all policies has to go here. Not particularly pretty... @@ -372,6 +374,20 @@ private: // +// Little helper continuation, to turn off writing to the cache. ToDo: when we have proper +// APIs to make requests / responses, we can remove this completely. +static int +cont_nocache_response(TSCont contp, TSEvent event, void *edata) +{ + TSHttpTxn txnp = static_castTSHttpTxn(edata); + + TSHttpTxnServerRespNoStoreSet(txnp, 1); + // Reenable and continue with the state machine. + TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); + return 0; +} + +// // Main plugin, a TXN hook in the TS_HTTP_READ_CACHE_HDR_HOOK. Unless the policy allows // caching, we will turn off the cache from here on for the TXN. // @@ -399,7 +415,7 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) TSDebug(PLUGIN_NAME, cache-status is %d, and leaving cache on (promoted), obj_status); } else { TSDebug(PLUGIN_NAME, cache-status is %d, and turning off the cache (not promoted), obj_status); -TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, contp); +TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, gNocacheCont); } break; default: @@ -413,11 +429,6 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) } break; - // Temporaray hack, to deal with the fact that we can turn off the cache earlier - case TS_EVENT_HTTP_READ_RESPONSE_HDR: -TSHttpTxnServerRespNoStoreSet(txnp, 1); -break; - // Should not happen default: TSDebug(PLUGIN_NAME, Unhandled event %d, (int)event); @@ -447,6 +458,8 @@ TSRemapInit(TSRemapInterface *api_info, char *errbuf, int errbuf_size) return TS_ERROR; } + gNocacheCont = TSContCreate(cont_nocache_response, NULL); + TSDebug(PLUGIN_NAME, remap plugin is successfully initialized); return TS_SUCCESS; /* success */ }
[15/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_mcode.c -- diff --git a/lib/luajit/src/lj_mcode.c b/lib/luajit/src/lj_mcode.c new file mode 100644 index 000..d95ebeb --- /dev/null +++ b/lib/luajit/src/lj_mcode.c @@ -0,0 +1,386 @@ +/* +** Machine code management. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_mcode_c +#define LUA_CORE + +#include lj_obj.h +#if LJ_HASJIT +#include lj_gc.h +#include lj_err.h +#include lj_jit.h +#include lj_mcode.h +#include lj_trace.h +#include lj_dispatch.h +#endif +#if LJ_HASJIT || LJ_HASFFI +#include lj_vm.h +#endif + +/* -- OS-specific functions --- */ + +#if LJ_HASJIT || LJ_HASFFI + +/* Define this if you want to run LuaJIT with Valgrind. */ +#ifdef LUAJIT_USE_VALGRIND +#include valgrind/valgrind.h +#endif + +#if LJ_TARGET_IOS +void sys_icache_invalidate(void *start, size_t len); +#endif + +/* Synchronize data/instruction cache. */ +void lj_mcode_sync(void *start, void *end) +{ +#ifdef LUAJIT_USE_VALGRIND + VALGRIND_DISCARD_TRANSLATIONS(start, (char *)end-(char *)start); +#endif +#if LJ_TARGET_X86ORX64 + UNUSED(start); UNUSED(end); +#elif LJ_TARGET_IOS + sys_icache_invalidate(start, (char *)end-(char *)start); +#elif LJ_TARGET_PPC + lj_vm_cachesync(start, end); +#elif defined(__GNUC__) + __clear_cache(start, end); +#else +#error Missing builtin to flush instruction cache +#endif +} + +#endif + +#if LJ_HASJIT + +#if LJ_TARGET_WINDOWS + +#define WIN32_LEAN_AND_MEAN +#include windows.h + +#define MCPROT_RW PAGE_READWRITE +#define MCPROT_RX PAGE_EXECUTE_READ +#define MCPROT_RWX PAGE_EXECUTE_READWRITE + +static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD prot) +{ + void *p = VirtualAlloc((void *)hint, sz, +MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot); + if (!p !hint) +lj_trace_err(J, LJ_TRERR_MCODEAL); + return p; +} + +static void mcode_free(jit_State *J, void *p, size_t sz) +{ + UNUSED(J); UNUSED(sz); + VirtualFree(p, 0, MEM_RELEASE); +} + +static int mcode_setprot(void *p, size_t sz, DWORD prot) +{ + DWORD oprot; + return !VirtualProtect(p, sz, prot, oprot); +} + +#elif LJ_TARGET_POSIX + +#include sys/mman.h + +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif + +#define MCPROT_RW (PROT_READ|PROT_WRITE) +#define MCPROT_RX (PROT_READ|PROT_EXEC) +#define MCPROT_RWX (PROT_READ|PROT_WRITE|PROT_EXEC) + +static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot) +{ + void *p = mmap((void *)hint, sz, prot, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) { +if (!hint) lj_trace_err(J, LJ_TRERR_MCODEAL); +p = NULL; + } + return p; +} + +static void mcode_free(jit_State *J, void *p, size_t sz) +{ + UNUSED(J); + munmap(p, sz); +} + +static int mcode_setprot(void *p, size_t sz, int prot) +{ + return mprotect(p, sz, prot); +} + +#elif LJ_64 + +#error Missing OS support for explicit placement of executable memory + +#else + +/* Fallback allocator. This will fail if memory is not executable by default. */ +#define LUAJIT_UNPROTECT_MCODE +#define MCPROT_RW 0 +#define MCPROT_RX 0 +#define MCPROT_RWX 0 + +static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot) +{ + UNUSED(hint); UNUSED(prot); + return lj_mem_new(J-L, sz); +} + +static void mcode_free(jit_State *J, void *p, size_t sz) +{ + lj_mem_free(J2G(J), p, sz); +} + +#endif + +/* -- MCode area protection --- */ + +/* Define this ONLY if page protection twiddling becomes a bottleneck. */ +#ifdef LUAJIT_UNPROTECT_MCODE + +/* It's generally considered to be a potential security risk to have +** pages with simultaneous write *and* execute access in a process. +** +** Do not even think about using this mode for server processes or +** apps handling untrusted external data (such as a browser). +** +** The security risk is not in LuaJIT itself -- but if an adversary finds +** any *other* flaw in your C application logic, then any RWX memory page +** simplifies writing an exploit considerably. +*/ +#define MCPROT_GEN MCPROT_RWX +#define MCPROT_RUN MCPROT_RWX + +static void mcode_protect(jit_State *J, int prot) +{ + UNUSED(J); UNUSED(prot); +} + +#else + +/* This is the default behaviour and much safer: +** +** Most of the time the memory pages holding machine code are executable, +** but NONE of them is writable. +** +** The current memory area is marked read-write (but NOT executable) only +** during the short time window while the assembler generates machine code. +*/ +#define MCPROT_GEN MCPROT_RW +#define MCPROT_RUN MCPROT_RX + +/* Protection twiddling failed. Probably due to kernel security. */ +static LJ_NOINLINE void mcode_protfail(jit_State *J) +{ + lua_CFunction panic = J2G(J)-panic; + if
[58/62] [abbrv] trafficserver git commit: Merge branch 'master' into 6.0.x
Merge branch 'master' into 6.0.x * master: (188 commits) Clang-format. briang what is the Jira for this?? TS-3798: Copy server session sharing pool to local HttpSM configuration. Revert TS-3584: SPDY and H2 requests should not trigger connection keep-alive. Revert TS-3640: Drupal auth fails over SPDY TS-3030 Restore the autoreconf -if ... TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition Revert TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition TS-3030 Remove the Makefile targets / ops TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition TS-3774 clang-format [TS-3794]: call spdy_process_read on early read from handshake. TS-3774: Fix memory leak issue in host file parsing for HostDB. [TS-3794]: Enhance post SSL handshake read race condition for SPDY and H2 scenarios. TS-3793: Check the incoming header request length for HTTP/2 requests TS-3783 TS-3030 Add luajit v2.0.4 as a subtree TS-3030 Remove the LuaJIT sub-module TS-3773 clang-format TS-3773: HostDB view all: add more detail for RR records Fixed typo in comment Fixed typo in comments ... Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/13c76b35 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/13c76b35 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/13c76b35 Branch: refs/heads/6.0.x Commit: 13c76b35cfd4c1b8d9225a8b24279beb08215a46 Parents: a0b75bc 95f45d4 Author: Leif Hedstrom zw...@apache.org Authored: Mon Jul 27 13:10:51 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Mon Jul 27 13:10:51 2015 -0600 -- .gitignore |6 +- .gitmodules |3 - Makefile.am |9 +- NOTICE |5 + build/plugins.mk|2 - ci/jenkins/bin/in_tree.sh |3 +- ci/jenkins/bin/out_of_tree.sh |6 +- ci/tsqa/tests/test_body_factory.py | 79 + ci/tsqa/tests/test_cache_generation.py | 10 +- ci/tsqa/tests/test_connect_attempts.py |4 - ci/tsqa/tests/test_custom_log.py| 71 + ci/tsqa/tests/test_hostdb.py| 107 + ci/tsqa/tests/test_regressions.py |1 + ci/tsqa/tests/test_tls_ticket_key_rotation.py | 172 + cmd/traffic_cop/Makefile.am |1 - cmd/traffic_cop/traffic_cop.cc | 14 +- cmd/traffic_crashlog/Makefile.am|2 - cmd/traffic_crashlog/traffic_crashlog.cc| 16 +- cmd/traffic_crashlog/traffic_crashlog.h |5 +- cmd/traffic_ctl/Makefile.am |1 - cmd/traffic_ctl/traffic_ctl.h |9 +- cmd/traffic_layout/Makefile.am |2 - cmd/traffic_layout/traffic_layout.cc| 164 +- cmd/traffic_line/Makefile.am|1 - cmd/traffic_line/traffic_line.cc| 12 +- cmd/traffic_manager/AddConfigFilesHere.cc |4 +- cmd/traffic_manager/Makefile.am |4 +- cmd/traffic_manager/MgmtHandlers.cc |5 +- cmd/traffic_manager/StatProcessor.cc|3 +- cmd/traffic_manager/StatProcessor.h |4 +- cmd/traffic_manager/StatType.cc |6 +- cmd/traffic_manager/StatXML.cc |2 +- cmd/traffic_manager/StatXML.h |2 +- cmd/traffic_manager/WebOverview.cc |6 +- cmd/traffic_manager/WebOverview.h |8 +- cmd/traffic_manager/traffic_manager.cc | 12 +- cmd/traffic_top/Makefile.am |3 - cmd/traffic_top/traffic_top.cc |2 +- cmd/traffic_via/Makefile.am |1 - cmd/traffic_via/traffic_via.cc | 13 +- cmd/traffic_wccp/Makefile.am|1 - cmd/traffic_wccp/wccp_client.cc |4 +- configure.ac|3 +- doc/admin/cluster-howto.en.rst |4 +- doc/admin/event-logging-formats.en.rst | 42 + doc/admin/faqs.en.rst | 32 +- doc/admin/http-proxy-caching.en.rst | 20 + doc/manpages.py |1 + doc/reference/api/TSHttpTxnMilestoneGet.en.rst | 12 + doc/reference/commands/index.en.rst |1 + doc/reference/commands/traffic_ctl.en.rst | 234 + .../configuration/records.config.en.rst | 48 +-
[34/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/minilua.c -- diff --git a/lib/luajit/src/host/minilua.c b/lib/luajit/src/host/minilua.c new file mode 100644 index 000..aee192a --- /dev/null +++ b/lib/luajit/src/host/minilua.c @@ -0,0 +1,7770 @@ +/* This is a heavily customized and minimized copy of Lua 5.1.5. */ +/* It's only used to build LuaJIT. It does NOT have all standard functions! */ +/** +* Copyright (C) 1994-2012 Lua.org, PUC-Rio. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* Software), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +**/ +#ifdef _MSC_VER +typedef unsigned __int64 U64; +#else +typedef unsigned long long U64; +#endif +int _CRT_glob = 0; +#include stddef.h +#include stdarg.h +#include limits.h +#include math.h +#include ctype.h +#include stdio.h +#include stdlib.h +#include string.h +#include setjmp.h +#include errno.h +#include time.h +typedef enum{ +TM_INDEX, +TM_NEWINDEX, +TM_GC, +TM_MODE, +TM_EQ, +TM_ADD, +TM_SUB, +TM_MUL, +TM_DIV, +TM_MOD, +TM_POW, +TM_UNM, +TM_LEN, +TM_LT, +TM_LE, +TM_CONCAT, +TM_CALL, +TM_N +}TMS; +enum OpMode{iABC,iABx,iAsBx}; +typedef enum{ +OP_MOVE, +OP_LOADK, +OP_LOADBOOL, +OP_LOADNIL, +OP_GETUPVAL, +OP_GETGLOBAL, +OP_GETTABLE, +OP_SETGLOBAL, +OP_SETUPVAL, +OP_SETTABLE, +OP_NEWTABLE, +OP_SELF, +OP_ADD, +OP_SUB, +OP_MUL, +OP_DIV, +OP_MOD, +OP_POW, +OP_UNM, +OP_NOT, +OP_LEN, +OP_CONCAT, +OP_JMP, +OP_EQ, +OP_LT, +OP_LE, +OP_TEST, +OP_TESTSET, +OP_CALL, +OP_TAILCALL, +OP_RETURN, +OP_FORLOOP, +OP_FORPREP, +OP_TFORLOOP, +OP_SETLIST, +OP_CLOSE, +OP_CLOSURE, +OP_VARARG +}OpCode; +enum OpArgMask{ +OpArgN, +OpArgU, +OpArgR, +OpArgK +}; +typedef enum{ +VVOID, +VNIL, +VTRUE, +VFALSE, +VK, +VKNUM, +VLOCAL, +VUPVAL, +VGLOBAL, +VINDEXED, +VJMP, +VRELOCABLE, +VNONRELOC, +VCALL, +VVARARG +}expkind; +enum RESERVED{ +TK_AND=257,TK_BREAK, +TK_DO,TK_ELSE,TK_ELSEIF,TK_END,TK_FALSE,TK_FOR,TK_FUNCTION, +TK_IF,TK_IN,TK_LOCAL,TK_NIL,TK_NOT,TK_OR,TK_REPEAT, +TK_RETURN,TK_THEN,TK_TRUE,TK_UNTIL,TK_WHILE, +TK_CONCAT,TK_DOTS,TK_EQ,TK_GE,TK_LE,TK_NE,TK_NUMBER, +TK_NAME,TK_STRING,TK_EOS +}; +typedef enum BinOpr{ +OPR_ADD,OPR_SUB,OPR_MUL,OPR_DIV,OPR_MOD,OPR_POW, +OPR_CONCAT, +OPR_NE,OPR_EQ, +OPR_LT,OPR_LE,OPR_GT,OPR_GE, +OPR_AND,OPR_OR, +OPR_NOBINOPR +}BinOpr; +typedef enum UnOpr{OPR_MINUS,OPR_NOT,OPR_LEN,OPR_NOUNOPR}UnOpr; +#define LUA_QL(x)'x' +#define luai_apicheck(L,o){(void)L;} +#define lua_number2str(s,n)sprintf((s),%.14g,(n)) +#define lua_str2number(s,p)strtod((s),(p)) +#define luai_numadd(a,b)((a)+(b)) +#define luai_numsub(a,b)((a)-(b)) +#define luai_nummul(a,b)((a)*(b)) +#define luai_numdiv(a,b)((a)/(b)) +#define luai_nummod(a,b)((a)-floor((a)/(b))*(b)) +#define luai_numpow(a,b)(pow(a,b)) +#define luai_numunm(a)(-(a)) +#define luai_numeq(a,b)((a)==(b)) +#define luai_numlt(a,b)((a)(b)) +#define luai_numle(a,b)((a)=(b)) +#define luai_numisnan(a)(!luai_numeq((a),(a))) +#define lua_number2int(i,d)((i)=(int)(d)) +#define lua_number2integer(i,d)((i)=(lua_Integer)(d)) +#define LUAI_THROW(L,c)longjmp((c)-b,1) +#define LUAI_TRY(L,c,a)if(setjmp((c)-b)==0){a} +#define lua_pclose(L,file)((void)((void)L,file),0) +#define lua_upvalueindex(i)((-10002)-(i)) +typedef struct lua_State lua_State; +typedef int(*lua_CFunction)(lua_State*L); +typedef const char*(*lua_Reader)(lua_State*L,void*ud,size_t*sz); +typedef void*(*lua_Alloc)(void*ud,void*ptr,size_t osize,size_t nsize); +typedef double lua_Number; +typedef ptrdiff_t lua_Integer; +static void lua_settop(lua_State*L,int idx); +static int lua_type(lua_State*L,int idx); +static const char* lua_tolstring(lua_State*L,int idx,size_t*len); +static size_t lua_objlen(lua_State*L,int idx); +static void lua_pushlstring(lua_State*L,const char*s,size_t l); +static void lua_pushcclosure(lua_State*L,lua_CFunction fn,int n);
[13/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_mem.c -- diff --git a/lib/luajit/src/lj_opt_mem.c b/lib/luajit/src/lj_opt_mem.c new file mode 100644 index 000..a4d96fc --- /dev/null +++ b/lib/luajit/src/lj_opt_mem.c @@ -0,0 +1,916 @@ +/* +** Memory access optimizations. +** AA: Alias Analysis using high-level semantic disambiguation. +** FWD: Load Forwarding (L2L) + Store Forwarding (S2L). +** DSE: Dead-Store Elimination. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_opt_mem_c +#define LUA_CORE + +#include lj_obj.h + +#if LJ_HASJIT + +#include lj_tab.h +#include lj_ir.h +#include lj_jit.h +#include lj_iropt.h + +/* Some local macros to save typing. Undef'd at the end. */ +#define IR(ref)(J-cur.ir[(ref)]) +#define fins (J-fold.ins) +#define fleft (J-fold.left) +#define fright (J-fold.right) + +/* +** Caveat #1: return value is not always a TRef -- only use with tref_ref(). +** Caveat #2: FWD relies on active CSE for xREF operands -- see lj_opt_fold(). +*/ + +/* Return values from alias analysis. */ +typedef enum { + ALIAS_NO,/* The two refs CANNOT alias (exact). */ + ALIAS_MAY, /* The two refs MAY alias (inexact). */ + ALIAS_MUST /* The two refs MUST alias (exact). */ +} AliasRet; + +/* -- ALOAD/HLOAD forwarding and ASTORE/HSTORE elimination */ + +/* Simplified escape analysis: check for intervening stores. */ +static AliasRet aa_escape(jit_State *J, IRIns *ir, IRIns *stop) +{ + IRRef ref = (IRRef)(ir - J-cur.ir); /* The ref that might be stored. */ + for (ir++; ir stop; ir++) +if (ir-op2 == ref + (ir-o == IR_ASTORE || ir-o == IR_HSTORE || +ir-o == IR_USTORE || ir-o == IR_FSTORE)) + return ALIAS_MAY; /* Reference was stored and might alias. */ + return ALIAS_NO; /* Reference was not stored. */ +} + +/* Alias analysis for two different table references. */ +static AliasRet aa_table(jit_State *J, IRRef ta, IRRef tb) +{ + IRIns *taba = IR(ta), *tabb = IR(tb); + int newa, newb; + lua_assert(ta != tb); + lua_assert(irt_istab(taba-t) irt_istab(tabb-t)); + /* Disambiguate new allocations. */ + newa = (taba-o == IR_TNEW || taba-o == IR_TDUP); + newb = (tabb-o == IR_TNEW || tabb-o == IR_TDUP); + if (newa newb) +return ALIAS_NO; /* Two different allocations never alias. */ + if (newb) { /* At least one allocation? */ +IRIns *tmp = taba; taba = tabb; tabb = tmp; + } else if (!newa) { +return ALIAS_MAY; /* Anything else: we just don't know. */ + } + return aa_escape(J, taba, tabb); +} + +/* Alias analysis for array and hash access using key-based disambiguation. */ +static AliasRet aa_ahref(jit_State *J, IRIns *refa, IRIns *refb) +{ + IRRef ka = refa-op2; + IRRef kb = refb-op2; + IRIns *keya, *keyb; + IRRef ta, tb; + if (refa == refb) +return ALIAS_MUST; /* Shortcut for same refs. */ + keya = IR(ka); + if (keya-o == IR_KSLOT) { ka = keya-op1; keya = IR(ka); } + keyb = IR(kb); + if (keyb-o == IR_KSLOT) { kb = keyb-op1; keyb = IR(kb); } + ta = (refa-o==IR_HREFK || refa-o==IR_AREF) ? IR(refa-op1)-op1 : refa-op1; + tb = (refb-o==IR_HREFK || refb-o==IR_AREF) ? IR(refb-op1)-op1 : refb-op1; + if (ka == kb) { +/* Same key. Check for same table with different ref (NEWREF vs. HREF). */ +if (ta == tb) + return ALIAS_MUST; /* Same key, same table. */ +else + return aa_table(J, ta, tb); /* Same key, possibly different table. */ + } + if (irref_isk(ka) irref_isk(kb)) +return ALIAS_NO; /* Different constant keys. */ + if (refa-o == IR_AREF) { +/* Disambiguate array references based on index arithmetic. */ +int32_t ofsa = 0, ofsb = 0; +IRRef basea = ka, baseb = kb; +lua_assert(refb-o == IR_AREF); +/* Gather base and offset from t[base] or t[base+-ofs]. */ +if (keya-o == IR_ADD irref_isk(keya-op2)) { + basea = keya-op1; + ofsa = IR(keya-op2)-i; + if (basea == kb ofsa != 0) + return ALIAS_NO; /* t[base+-ofs] vs. t[base]. */ +} +if (keyb-o == IR_ADD irref_isk(keyb-op2)) { + baseb = keyb-op1; + ofsb = IR(keyb-op2)-i; + if (ka == baseb ofsb != 0) + return ALIAS_NO; /* t[base] vs. t[base+-ofs]. */ +} +if (basea == baseb ofsa != ofsb) + return ALIAS_NO; /* t[base+-o1] vs. t[base+-o2] and o1 != o2. */ + } else { +/* Disambiguate hash references based on the type of their keys. */ +lua_assert((refa-o==IR_HREF || refa-o==IR_HREFK || refa-o==IR_NEWREF) + (refb-o==IR_HREF || refb-o==IR_HREFK || refb-o==IR_NEWREF)); +if (!irt_sametype(keya-t, keyb-t)) + return ALIAS_NO; /* Different key types. */ + } + if (ta == tb) +return ALIAS_MAY; /* Same table, cannot disambiguate keys. */ + else +return aa_table(J, ta, tb); /* Try to disambiguate tables. */ +} + +/* Array and hash load
[24/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_x86.h -- diff --git a/lib/luajit/src/lj_asm_x86.h b/lib/luajit/src/lj_asm_x86.h new file mode 100644 index 000..0b6b2d4 --- /dev/null +++ b/lib/luajit/src/lj_asm_x86.h @@ -0,0 +1,2806 @@ +/* +** x86/x64 IR assembler (SSA IR - machine code). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* -- Guard handling -- */ + +/* Generate an exit stub group at the bottom of the reserved MCode memory. */ +static MCode *asm_exitstub_gen(ASMState *as, ExitNo group) +{ + ExitNo i, groupofs = (group*EXITSTUBS_PER_GROUP) 0xff; + MCode *mxp = as-mcbot; + MCode *mxpstart = mxp; + if (mxp + (2+2)*EXITSTUBS_PER_GROUP+8+5 = as-mctop) +asm_mclimit(as); + /* Push low byte of exitno for each exit stub. */ + *mxp++ = XI_PUSHi8; *mxp++ = (MCode)groupofs; + for (i = 1; i EXITSTUBS_PER_GROUP; i++) { +*mxp++ = XI_JMPs; *mxp++ = (MCode)((2+2)*(EXITSTUBS_PER_GROUP - i) - 2); +*mxp++ = XI_PUSHi8; *mxp++ = (MCode)(groupofs + i); + } + /* Push the high byte of the exitno for each exit stub group. */ + *mxp++ = XI_PUSHi8; *mxp++ = (MCode)((group*EXITSTUBS_PER_GROUP)8); + /* Store DISPATCH at original stack slot 0. Account for the two push ops. */ + *mxp++ = XI_MOVmi; + *mxp++ = MODRM(XM_OFS8, 0, RID_ESP); + *mxp++ = MODRM(XM_SCALE1, RID_ESP, RID_ESP); + *mxp++ = 2*sizeof(void *); + *(int32_t *)mxp = ptr2addr(J2GG(as-J)-dispatch); mxp += 4; + /* Jump to exit handler which fills in the ExitState. */ + *mxp++ = XI_JMP; mxp += 4; + *((int32_t *)(mxp-4)) = jmprel(mxp, (MCode *)(void *)lj_vm_exit_handler); + /* Commit the code for this group (even if assembly fails later on). */ + lj_mcode_commitbot(as-J, mxp); + as-mcbot = mxp; + as-mclim = as-mcbot + MCLIM_REDZONE; + return mxpstart; +} + +/* Setup all needed exit stubs. */ +static void asm_exitstub_setup(ASMState *as, ExitNo nexits) +{ + ExitNo i; + if (nexits = EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) +lj_trace_err(as-J, LJ_TRERR_SNAPOV); + for (i = 0; i (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++) +if (as-J-exitstubgroup[i] == NULL) + as-J-exitstubgroup[i] = asm_exitstub_gen(as, i); +} + +/* Emit conditional branch to exit for guard. +** It's important to emit this *after* all registers have been allocated, +** because rematerializations may invalidate the flags. +*/ +static void asm_guardcc(ASMState *as, int cc) +{ + MCode *target = exitstub_addr(as-J, as-snapno); + MCode *p = as-mcp; + if (LJ_UNLIKELY(p == as-invmcp)) { +as-loopinv = 1; +*(int32_t *)(p+1) = jmprel(p+5, target); +target = p; +cc ^= 1; +if (as-realign) { + emit_sjcc(as, cc, target); + return; +} + } + emit_jcc(as, cc, target); +} + +/* -- Memory operand fusion --- */ + +/* Limit linear search to this distance. Avoids O(n^2) behavior. */ +#define CONFLICT_SEARCH_LIM31 + +/* Check if a reference is a signed 32 bit constant. */ +static int asm_isk32(ASMState *as, IRRef ref, int32_t *k) +{ + if (irref_isk(ref)) { +IRIns *ir = IR(ref); +if (ir-o != IR_KINT64) { + *k = ir-i; + return 1; +} else if (checki32((int64_t)ir_kint64(ir)-u64)) { + *k = (int32_t)ir_kint64(ir)-u64; + return 1; +} + } + return 0; +} + +/* Check if there's no conflicting instruction between curins and ref. +** Also avoid fusing loads if there are multiple references. +*/ +static int noconflict(ASMState *as, IRRef ref, IROp conflict, int noload) +{ + IRIns *ir = as-ir; + IRRef i = as-curins; + if (i ref + CONFLICT_SEARCH_LIM) +return 0; /* Give up, ref is too far away. */ + while (--i ref) { +if (ir[i].o == conflict) + return 0; /* Conflict found. */ +else if (!noload (ir[i].op1 == ref || ir[i].op2 == ref)) + return 0; + } + return 1; /* Ok, no conflict. */ +} + +/* Fuse array base into memory operand. */ +static IRRef asm_fuseabase(ASMState *as, IRRef ref) +{ + IRIns *irb = IR(ref); + as-mrm.ofs = 0; + if (irb-o == IR_FLOAD) { +IRIns *ira = IR(irb-op1); +lua_assert(irb-op2 == IRFL_TAB_ARRAY); +/* We can avoid the FLOAD of t-array for colocated arrays. */ +if (ira-o == IR_TNEW ira-op1 = LJ_MAX_COLOSIZE + !neverfuse(as) noconflict(as, irb-op1, IR_NEWREF, 1)) { + as-mrm.ofs = (int32_t)sizeof(GCtab); /* Ofs to colocated array. */ + return irb-op1; /* Table obj. */ +} + } else if (irb-o == IR_ADD irref_isk(irb-op2)) { +/* Fuse base offset (vararg load). */ +as-mrm.ofs = IR(irb-op2)-i; +return irb-op1; + } + return ref; /* Otherwise use the given array base. */ +} + +/* Fuse array reference into memory operand. */ +static void asm_fusearef(ASMState *as, IRIns *ir, RegSet allow) +{ + IRIns *irx; + lua_assert(ir-o == IR_AREF); + as-mrm.base =
[62/62] [abbrv] trafficserver git commit: Merge branch 'master' into 6.0.x
Merge branch 'master' into 6.0.x * master: [TS-3802]: fix double free of MIOBuffer in SSLNetVConnection during SPDY inactivity. TS-3800: HostDB UI: support json output, improve srv records, add hostnames Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/975c4c8c Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/975c4c8c Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/975c4c8c Branch: refs/heads/6.0.x Commit: 975c4c8ca3213d0b550f39092d0a751193ed8a05 Parents: f86beac ec74792 Author: Leif Hedstrom zw...@apache.org Authored: Tue Jul 28 17:38:55 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Tue Jul 28 17:38:55 2015 -0600 -- iocore/hostdb/HostDB.cc | 169 ++--- iocore/hostdb/I_HostDBProcessor.h | 3 + proxy/Show.h | 16 +++- proxy/spdy/SpdyClientSession.cc | 8 ++ 4 files changed, 161 insertions(+), 35 deletions(-) --
[44/62] [abbrv] trafficserver git commit: [TS-3794]: Enhance post SSL handshake read race condition for SPDY and H2 scenarios.
[TS-3794]: Enhance post SSL handshake read race condition for SPDY and H2 scenarios. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3838cf2c Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3838cf2c Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3838cf2c Branch: refs/heads/6.0.x Commit: 3838cf2c1033eb5c4b37170e4903c294610bcaed Parents: 1cb87d2 Author: Sudheer Vinukonda sudhe...@yahoo-inc.com Authored: Thu Jul 23 19:15:40 2015 + Committer: Sudheer Vinukonda sudhe...@yahoo-inc.com Committed: Thu Jul 23 19:53:23 2015 + -- iocore/net/SSLNetVConnection.cc | 2 +- proxy/http/HttpSM.cc | 2 +- proxy/http2/Http2ClientSession.cc | 7 +++ proxy/http2/Http2SessionAccept.cc | 10 +- proxy/spdy/SpdyClientSession.cc | 7 ++- proxy/spdy/SpdySessionAccept.cc | 10 +- 6 files changed, 33 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/iocore/net/SSLNetVConnection.cc -- diff --git a/iocore/net/SSLNetVConnection.cc b/iocore/net/SSLNetVConnection.cc index ed04ed3..5e2b0ef 100644 --- a/iocore/net/SSLNetVConnection.cc +++ b/iocore/net/SSLNetVConnection.cc @@ -488,7 +488,7 @@ SSLNetVConnection::net_read_io(NetHandler *nh, EThread *lthread) if (ret == EVENT_ERROR) { this-read.triggered = 0; readSignalError(nh, err); -} else if (ret == SSL_HANDSHAKE_WANT_READ || ret == SSL_HANDSHAKE_WANT_ACCEPT || ret == EVENT_CONT) { +} else if (ret == SSL_HANDSHAKE_WANT_READ || ret == SSL_HANDSHAKE_WANT_ACCEPT) { if (SSLConfigParams::ssl_handshake_timeout_in 0) { double handshake_time = ((double)(Thread::get_hrtime() - sslHandshakeBeginTime) / 10); Debug(ssl, ssl handshake for vc %p, took %.3f seconds, configured handshake_timer: %d, this, handshake_time, http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http/HttpSM.cc -- diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 3f4dd72..4ac8d4a 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -614,7 +614,7 @@ HttpSM::state_read_client_request_header(int event, void *data) // time we've been called. The timeout had been set to // the accept timeout by the HttpClientSession // - if (client_request_hdr_bytes == 0) { + if ((ua_buffer_reader-read_avail() 0) (client_request_hdr_bytes == 0)) { milestones[TS_MILESTONE_UA_FIRST_READ] = Thread::get_hrtime(); ua_session-get_netvc()-set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf-transaction_no_activity_timeout_in)); } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http2/Http2ClientSession.cc -- diff --git a/proxy/http2/Http2ClientSession.cc b/proxy/http2/Http2ClientSession.cc index 4e3b85e..0ea6fca 100644 --- a/proxy/http2/Http2ClientSession.cc +++ b/proxy/http2/Http2ClientSession.cc @@ -195,6 +195,13 @@ Http2ClientSession::do_io_close(int alerrno) DebugHttp2Ssn0(session closed); ink_assert(this-mutex-thread_holding == this_ethread()); + if (client_vc) { +// clean up ssl's first byte iobuf +SSLNetVConnection *ssl_vc = dynamic_castSSLNetVConnection *(client_vc); +if (ssl_vc) { + ssl_vc-set_ssl_iobuf(NULL); +} + } HTTP2_DECREMENT_THREAD_DYN_STAT(HTTP2_STAT_CURRENT_CLIENT_SESSION_COUNT, this-mutex-thread_holding); send_connection_event(this-connection_state, HTTP2_SESSION_EVENT_FINI, this); do_api_callout(TS_HTTP_SSN_CLOSE_HOOK); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http2/Http2SessionAccept.cc -- diff --git a/proxy/http2/Http2SessionAccept.cc b/proxy/http2/Http2SessionAccept.cc index fbb25db..ca3139f 100644 --- a/proxy/http2/Http2SessionAccept.cc +++ b/proxy/http2/Http2SessionAccept.cc @@ -65,7 +65,15 @@ Http2SessionAccept::mainEvent(int event, void *data) ink_release_assert((event == NET_EVENT_ACCEPT) ? (data != 0) : (1)); if (event == NET_EVENT_ACCEPT) { -this-accept(static_castNetVConnection *(data), NULL, NULL); +NetVConnection *netvc = static_castNetVConnection *(data); +SSLNetVConnection *ssl_vc = dynamic_castSSLNetVConnection *(netvc); +MIOBuffer *iobuf = NULL; +IOBufferReader *reader = NULL; +if (ssl_vc) { + iobuf = ssl_vc-get_ssl_iobuf(); + reader = ssl_vc-get_ssl_reader(); +} +this-accept(static_castNetVConnection *(data), iobuf, reader); return EVENT_CONT; }
[20/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_crecord.c -- diff --git a/lib/luajit/src/lj_crecord.c b/lib/luajit/src/lj_crecord.c new file mode 100644 index 000..a46665e --- /dev/null +++ b/lib/luajit/src/lj_crecord.c @@ -0,0 +1,1671 @@ +/* +** Trace recorder for C data operations. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_ffrecord_c +#define LUA_CORE + +#include lj_obj.h + +#if LJ_HASJIT LJ_HASFFI + +#include lj_err.h +#include lj_str.h +#include lj_tab.h +#include lj_frame.h +#include lj_ctype.h +#include lj_cdata.h +#include lj_cparse.h +#include lj_cconv.h +#include lj_clib.h +#include lj_ccall.h +#include lj_ff.h +#include lj_ir.h +#include lj_jit.h +#include lj_ircall.h +#include lj_iropt.h +#include lj_trace.h +#include lj_record.h +#include lj_ffrecord.h +#include lj_snap.h +#include lj_crecord.h +#include lj_dispatch.h + +/* Some local macros to save typing. Undef'd at the end. */ +#define IR(ref)(J-cur.ir[(ref)]) + +/* Pass IR on to next optimization in chain (FOLD). */ +#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) + +#define emitconv(a, dt, st, flags) \ + emitir(IRT(IR_CONV, (dt)), (a), (st)|((dt) 5)|(flags)) + +/* -- C type checks --- */ + +static GCcdata *argv2cdata(jit_State *J, TRef tr, cTValue *o) +{ + GCcdata *cd; + TRef trtypeid; + if (!tref_iscdata(tr)) +lj_trace_err(J, LJ_TRERR_BADTYPE); + cd = cdataV(o); + /* Specialize to the CTypeID. */ + trtypeid = emitir(IRT(IR_FLOAD, IRT_U16), tr, IRFL_CDATA_CTYPEID); + emitir(IRTG(IR_EQ, IRT_INT), trtypeid, lj_ir_kint(J, (int32_t)cd-ctypeid)); + return cd; +} + +/* Specialize to the CTypeID held by a cdata constructor. */ +static CTypeID crec_constructor(jit_State *J, GCcdata *cd, TRef tr) +{ + CTypeID id; + lua_assert(tref_iscdata(tr) cd-ctypeid == CTID_CTYPEID); + id = *(CTypeID *)cdataptr(cd); + tr = emitir(IRT(IR_FLOAD, IRT_INT), tr, IRFL_CDATA_INT); + emitir(IRTG(IR_EQ, IRT_INT), tr, lj_ir_kint(J, (int32_t)id)); + return id; +} + +static CTypeID argv2ctype(jit_State *J, TRef tr, cTValue *o) +{ + if (tref_isstr(tr)) { +GCstr *s = strV(o); +CPState cp; +CTypeID oldtop; +/* Specialize to the string containing the C type declaration. */ +emitir(IRTG(IR_EQ, IRT_STR), tr, lj_ir_kstr(J, s)); +cp.L = J-L; +cp.cts = ctype_ctsG(J2G(J)); +oldtop = cp.cts-top; +cp.srcname = strdata(s); +cp.p = strdata(s); +cp.param = NULL; +cp.mode = CPARSE_MODE_ABSTRACT|CPARSE_MODE_NOIMPLICIT; +if (lj_cparse(cp) || cp.cts-top oldtop) /* Avoid new struct defs. */ + lj_trace_err(J, LJ_TRERR_BADTYPE); +return cp.val.id; + } else { +GCcdata *cd = argv2cdata(J, tr, o); +return cd-ctypeid == CTID_CTYPEID ? crec_constructor(J, cd, tr) : + cd-ctypeid; + } +} + +/* Convert CType to IRType (if possible). */ +static IRType crec_ct2irt(CTState *cts, CType *ct) +{ + if (ctype_isenum(ct-info)) ct = ctype_child(cts, ct); + if (LJ_LIKELY(ctype_isnum(ct-info))) { +if ((ct-info CTF_FP)) { + if (ct-size == sizeof(double)) + return IRT_NUM; + else if (ct-size == sizeof(float)) + return IRT_FLOAT; +} else { + uint32_t b = lj_fls(ct-size); + if (b = 3) + return IRT_I8 + 2*b + ((ct-info CTF_UNSIGNED) ? 1 : 0); +} + } else if (ctype_isptr(ct-info)) { +return (LJ_64 ct-size == 8) ? IRT_P64 : IRT_P32; + } else if (ctype_iscomplex(ct-info)) { +if (ct-size == 2*sizeof(double)) + return IRT_NUM; +else if (ct-size == 2*sizeof(float)) + return IRT_FLOAT; + } + return IRT_CDATA; +} + +/* -- Optimized memory fill and copy -- */ + +/* Maximum length and unroll of inlined copy/fill. */ +#define CREC_COPY_MAXUNROLL16 +#define CREC_COPY_MAXLEN 128 + +#define CREC_FILL_MAXUNROLL16 + +/* Number of windowed registers used for optimized memory copy. */ +#if LJ_TARGET_X86 +#define CREC_COPY_REGWIN 2 +#elif LJ_TARGET_PPC || LJ_TARGET_MIPS +#define CREC_COPY_REGWIN 8 +#else +#define CREC_COPY_REGWIN 4 +#endif + +/* List of memory offsets for copy/fill. */ +typedef struct CRecMemList { + CTSize ofs; /* Offset in bytes. */ + IRType tp; /* Type of load/store. */ + TRef trofs; /* TRef of interned offset. */ + TRef trval; /* TRef of load value. */ +} CRecMemList; + +/* Generate copy list for element-wise struct copy. */ +static MSize crec_copy_struct(CRecMemList *ml, CTState *cts, CType *ct) +{ + CTypeID fid = ct-sib; + MSize mlp = 0; + while (fid) { +CType *df = ctype_get(cts, fid); +fid = df-sib; +if (ctype_isfield(df-info)) { + CType *cct; + IRType tp; +
[41/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/ext_ffi.html -- diff --git a/lib/luajit/doc/ext_ffi.html b/lib/luajit/doc/ext_ffi.html new file mode 100644 index 000..77b8e26 --- /dev/null +++ b/lib/luajit/doc/ext_ffi.html @@ -0,0 +1,330 @@ +!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN http://www.w3.org/TR/html4/strict.dtd; +html +head +titleFFI Library/title +meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 +meta name=Author content=Mike Pall +meta name=Copyright content=Copyright (C) 2005-2015, Mike Pall +meta name=Language content=en +link rel=stylesheet type=text/css href=bluequad.css media=screen +link rel=stylesheet type=text/css href=bluequad-print.css media=print +/head +body +div id=site +a href=http://luajit.org;spanLuaspan id=logoJIT/span/span/a +/div +div id=head +h1FFI Library/h1 +/div +div id=nav +ulli +a href=luajit.htmlLuaJIT/a +ulli +a href=http://luajit.org/download.html;Download span class=extraquo;/span/a +/lili +a href=install.htmlInstallation/a +/lili +a href=running.htmlRunning/a +/li/ul +/lili +a href=extensions.htmlExtensions/a +ulli +a class=current href=ext_ffi.htmlFFI Library/a +ulli +a href=ext_ffi_tutorial.htmlFFI Tutorial/a +/lili +a href=ext_ffi_api.htmlffi.* API/a +/lili +a href=ext_ffi_semantics.htmlFFI Semantics/a +/li/ul +/lili +a href=ext_jit.htmljit.* Library/a +/lili +a href=ext_c_api.htmlLua/C API/a +/li/ul +/lili +a href=status.htmlStatus/a +ulli +a href=changes.htmlChanges/a +/li/ul +/lili +a href=faq.htmlFAQ/a +/lili +a href=http://luajit.org/performance.html;Performance span class=extraquo;/span/a +/lili +a href=http://wiki.luajit.org/;Wiki span class=extraquo;/span/a +/lili +a href=http://luajit.org/list.html;Mailing List span class=extraquo;/span/a +/li/ul +/div +div id=main +p + +The FFI library allows bcalling external Cnbsp;functions/b and +busing Cnbsp;data structures/b from pure Lua code. + +/p +p + +The FFI library largely obviates the need to write tedious manual +Lua/C bindings in C. No need to learn a separate binding language +mdash; bit parses plain Cnbsp;declarations!/b These can be +cut-n-pasted from Cnbsp;header files or reference manuals. It's up to +the task of binding large libraries without the need for dealing with +fragile binding generators. + +/p +p +The FFI library is tightly integrated into LuaJIT (it's not available +as a separate module). The code generated by the JIT-compiler for +accesses to Cnbsp;data structures from Lua code is on par with the +code a Cnbsp;compiler would generate. Calls to Cnbsp;functions can +be inlined in JIT-compiled code, unlike calls to functions bound via +the classic Lua/C API. +/p +p +This page gives a short introduction to the usage of the FFI library. +emPlease use the FFI sub-topics in the navigation bar to learn more./em +/p + +h2 id=callMotivating Example: Calling External C Functions/h2 +p +It's really easy to call an external Cnbsp;library function: +/p +pre class=code mark +span class=codemark#9312; +#9313; + + +#9314;/spanlocal ffi = require(ffi) +ffi.cdef[[ +span style=color:#00a000;int printf(const char *fmt, ...);/span +]] +ffi.C.printf(Hello %s!, world) +/pre +p +So, let's pick that apart: +/p +p +span class=mark#9312;/span Load the FFI library. +/p +p +span class=mark#9313;/span Add a Cnbsp;declaration +for the function. The part inside the double-brackets (in green) is +just standard Cnbsp;syntax. +/p +p +span class=mark#9314;/span Call the named +Cnbsp;function mdash; Yes, it's that simple! +/p +p style=font-size: 8pt; +Actually, what goes on behind the scenes is far from simple: span +style=color:#4040c0;#9314;/span makes use of the standard +Cnbsp;library namespace ttffi.C/tt. Indexing this namespace with +a symbol name (ttprintf/tt) automatically binds it to the +standard Cnbsp;library. The result is a special kind of object which, +when called, runs the ttprintf/tt function. The arguments passed +to this function are automatically converted from Lua objects to the +corresponding Cnbsp;types. +/p +p +Ok, so maybe the use of ttprintf()/tt wasn't such a spectacular +example. You could have done that with ttio.write()/tt and +ttstring.format()/tt, too. But you get the idea ... +/p +p +So here's something to pop up a message box on Windows: +/p +pre class=code +local ffi = require(ffi) +ffi.cdef[[ +span style=color:#00a000;int MessageBoxA(void *w, const char *txt, const char *cap, int type);/span +]] +ffi.C.MessageBoxA(nil, Hello world!, Test, 0) +/pre +p +Bing! Again, that was far too easy, no? +/p +p style=font-size: 8pt; +Compare this with the effort required to bind that function using the +classic Lua/C API: create an extra Cnbsp;file, add a Cnbsp;function +that retrieves and checks the argument types passed from Lua and calls +the actual Cnbsp;function, add a list of module functions and their +names, add a ttluaopen_*/tt function and register all module
[21/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_cparse.c -- diff --git a/lib/luajit/src/lj_cparse.c b/lib/luajit/src/lj_cparse.c new file mode 100644 index 000..b9df88d --- /dev/null +++ b/lib/luajit/src/lj_cparse.c @@ -0,0 +1,1872 @@ +/* +** C declaration parser. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#include lj_obj.h + +#if LJ_HASFFI + +#include lj_gc.h +#include lj_err.h +#include lj_str.h +#include lj_ctype.h +#include lj_cparse.h +#include lj_frame.h +#include lj_vm.h +#include lj_char.h +#include lj_strscan.h + +/* +** Important note: this is NOT a validating C parser! This is a minimal +** C declaration parser, solely for use by the LuaJIT FFI. +** +** It ought to return correct results for properly formed C declarations, +** but it may accept some invalid declarations, too (and return nonsense). +** Also, it shows rather generic error messages to avoid unnecessary bloat. +** If in doubt, please check the input against your favorite C compiler. +*/ + +/* -- C lexer - */ + +/* C lexer token names. */ +static const char *const ctoknames[] = { +#define CTOKSTR(name, str) str, +CTOKDEF(CTOKSTR) +#undef CTOKSTR + NULL +}; + +/* Forward declaration. */ +LJ_NORET static void cp_err(CPState *cp, ErrMsg em); + +static const char *cp_tok2str(CPState *cp, CPToken tok) +{ + lua_assert(tok CTOK_FIRSTDECL); + if (tok CTOK_OFS) +return ctoknames[tok-CTOK_OFS-1]; + else if (!lj_char_iscntrl(tok)) +return lj_str_pushf(cp-L, %c, tok); + else +return lj_str_pushf(cp-L, char(%d), tok); +} + +/* End-of-line? */ +static LJ_AINLINE int cp_iseol(CPChar c) +{ + return (c == '\n' || c == '\r'); +} + +/* Peek next raw character. */ +static LJ_AINLINE CPChar cp_rawpeek(CPState *cp) +{ + return (CPChar)(uint8_t)(*cp-p); +} + +static LJ_NOINLINE CPChar cp_get_bs(CPState *cp); + +/* Get next character. */ +static LJ_AINLINE CPChar cp_get(CPState *cp) +{ + cp-c = (CPChar)(uint8_t)(*cp-p++); + if (LJ_LIKELY(cp-c != '\\')) return cp-c; + return cp_get_bs(cp); +} + +/* Transparently skip backslash-escaped line breaks. */ +static LJ_NOINLINE CPChar cp_get_bs(CPState *cp) +{ + CPChar c2, c = cp_rawpeek(cp); + if (!cp_iseol(c)) return cp-c; + cp-p++; + c2 = cp_rawpeek(cp); + if (cp_iseol(c2) c2 != c) cp-p++; + cp-linenumber++; + return cp_get(cp); +} + +/* Grow save buffer. */ +static LJ_NOINLINE void cp_save_grow(CPState *cp, CPChar c) +{ + MSize newsize; + if (cp-sb.sz = CPARSE_MAX_BUF/2) +cp_err(cp, LJ_ERR_XELEM); + newsize = cp-sb.sz * 2; + lj_str_resizebuf(cp-L, cp-sb, newsize); + cp-sb.buf[cp-sb.n++] = (char)c; +} + +/* Save character in buffer. */ +static LJ_AINLINE void cp_save(CPState *cp, CPChar c) +{ + if (LJ_UNLIKELY(cp-sb.n + 1 cp-sb.sz)) +cp_save_grow(cp, c); + else +cp-sb.buf[cp-sb.n++] = (char)c; +} + +/* Skip line break. Handles \n, \r, \r\n or \n\r. */ +static void cp_newline(CPState *cp) +{ + CPChar c = cp_rawpeek(cp); + if (cp_iseol(c) c != cp-c) cp-p++; + cp-linenumber++; +} + +LJ_NORET static void cp_errmsg(CPState *cp, CPToken tok, ErrMsg em, ...) +{ + const char *msg, *tokstr; + lua_State *L; + va_list argp; + if (tok == 0) { +tokstr = NULL; + } else if (tok == CTOK_IDENT || tok == CTOK_INTEGER || tok == CTOK_STRING || +tok = CTOK_FIRSTDECL) { +if (cp-sb.n == 0) cp_save(cp, '$'); +cp_save(cp, '\0'); +tokstr = cp-sb.buf; + } else { +tokstr = cp_tok2str(cp, tok); + } + L = cp-L; + va_start(argp, em); + msg = lj_str_pushvf(L, err2msg(em), argp); + va_end(argp); + if (tokstr) +msg = lj_str_pushf(L, err2msg(LJ_ERR_XNEAR), msg, tokstr); + if (cp-linenumber 1) +msg = lj_str_pushf(L, %s at line %d, msg, cp-linenumber); + lj_err_callermsg(L, msg); +} + +LJ_NORET LJ_NOINLINE static void cp_err_token(CPState *cp, CPToken tok) +{ + cp_errmsg(cp, cp-tok, LJ_ERR_XTOKEN, cp_tok2str(cp, tok)); +} + +LJ_NORET LJ_NOINLINE static void cp_err_badidx(CPState *cp, CType *ct) +{ + GCstr *s = lj_ctype_repr(cp-cts-L, ctype_typeid(cp-cts, ct), NULL); + cp_errmsg(cp, 0, LJ_ERR_FFI_BADIDX, strdata(s)); +} + +LJ_NORET LJ_NOINLINE static void cp_err(CPState *cp, ErrMsg em) +{ + cp_errmsg(cp, 0, em); +} + +/* -- Main lexical scanner */ + +/* Parse number literal. Only handles int32_t/uint32_t right now. */ +static CPToken cp_number(CPState *cp) +{ + StrScanFmt fmt; + TValue o; + do { cp_save(cp, cp-c); } while (lj_char_isident(cp_get(cp))); + cp_save(cp, '\0'); + fmt = lj_strscan_scan((const uint8_t *)cp-sb.buf, o, STRSCAN_OPT_C); + if (fmt == STRSCAN_INT) cp-val.id = CTID_INT32; + else if (fmt == STRSCAN_U32) cp-val.id = CTID_UINT32; + else if (!(cp-mode CPARSE_MODE_SKIP)) +cp_errmsg(cp, CTOK_INTEGER, LJ_ERR_XNUMBER); + cp-val.u32 = (uint32_t)o.i; + return
[28/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm.c -- diff --git a/lib/luajit/src/lj_asm.c b/lib/luajit/src/lj_asm.c new file mode 100644 index 000..804b4dc --- /dev/null +++ b/lib/luajit/src/lj_asm.c @@ -0,0 +1,1920 @@ +/* +** IR assembler (SSA IR - machine code). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_asm_c +#define LUA_CORE + +#include lj_obj.h + +#if LJ_HASJIT + +#include lj_gc.h +#include lj_str.h +#include lj_tab.h +#include lj_frame.h +#if LJ_HASFFI +#include lj_ctype.h +#endif +#include lj_ir.h +#include lj_jit.h +#include lj_ircall.h +#include lj_iropt.h +#include lj_mcode.h +#include lj_iropt.h +#include lj_trace.h +#include lj_snap.h +#include lj_asm.h +#include lj_dispatch.h +#include lj_vm.h +#include lj_target.h + +#ifdef LUA_USE_ASSERT +#include stdio.h +#endif + +/* -- Assembler state and common macros --- */ + +/* Assembler state. */ +typedef struct ASMState { + RegCost cost[RID_MAX]; /* Reference and blended allocation cost for regs. */ + + MCode *mcp; /* Current MCode pointer (grows down). */ + MCode *mclim;/* Lower limit for MCode memory + red zone. */ +#ifdef LUA_USE_ASSERT + MCode *mcp_prev; /* Red zone overflow check. */ +#endif + + IRIns *ir; /* Copy of pointer to IR instructions/constants. */ + jit_State *J;/* JIT compiler state. */ + +#if LJ_TARGET_X86ORX64 + x86ModRM mrm;/* Fused x86 address operand. */ +#endif + + RegSet freeset; /* Set of free registers. */ + RegSet modset; /* Set of registers modified inside the loop. */ + RegSet weakset; /* Set of weakly referenced registers. */ + RegSet phiset; /* Set of PHI registers. */ + + uint32_t flags; /* Copy of JIT compiler flags. */ + int loopinv; /* Loop branch inversion (0:no, 1:yes, 2:yes+CC_P). */ + + int32_t evenspill; /* Next even spill slot. */ + int32_t oddspill;/* Next odd spill slot (or 0). */ + + IRRef curins;/* Reference of current instruction. */ + IRRef stopins; /* Stop assembly before hitting this instruction. */ + IRRef orignins; /* Original T-nins. */ + + IRRef snapref; /* Current snapshot is active after this reference. */ + IRRef snaprename;/* Rename highwater mark for snapshot check. */ + SnapNo snapno; /* Current snapshot number. */ + SnapNo loopsnapno; /* Loop snapshot number. */ + + IRRef fuseref; /* Fusion limit (loopref, 0 or FUSE_DISABLED). */ + IRRef sectref; /* Section base reference (loopref or 0). */ + IRRef loopref; /* Reference of LOOP instruction (or 0). */ + + BCReg topslot; /* Number of slots for stack check (unless 0). */ + int32_t gcsteps; /* Accumulated number of GC steps (per section). */ + + GCtrace *T; /* Trace to assemble. */ + GCtrace *parent; /* Parent trace (or NULL). */ + + MCode *mcbot;/* Bottom of reserved MCode. */ + MCode *mctop;/* Top of generated MCode. */ + MCode *mcloop; /* Pointer to loop MCode (or NULL). */ + MCode *invmcp; /* Points to invertible loop branch (or NULL). */ + MCode *flagmcp; /* Pending opportunity to merge flag setting ins. */ + MCode *realign; /* Realign loop if not NULL. */ + +#ifdef RID_NUM_KREF + int32_t krefk[RID_NUM_KREF]; +#endif + IRRef1 phireg[RID_MAX]; /* PHI register references. */ + uint16_t parentmap[LJ_MAX_JSLOTS]; /* Parent instruction to RegSP map. */ +} ASMState; + +#define IR(ref)(as-ir[(ref)]) + +#define ASMREF_TMP1REF_TRUE/* Temp. register. */ +#define ASMREF_TMP2REF_FALSE /* Temp. register. */ +#define ASMREF_L REF_NIL /* Stores register for L. */ + +/* Check for variant to invariant references. */ +#define iscrossref(as, ref)((ref) as-sectref) + +/* Inhibit memory op fusion from variant to invariant references. */ +#define FUSE_DISABLED (~(IRRef)0) +#define mayfuse(as, ref) ((ref) as-fuseref) +#define neverfuse(as) (as-fuseref == FUSE_DISABLED) +#define canfuse(as, ir)(!neverfuse(as) !irt_isphi((ir)-t)) +#define opisfusableload(o) \ + ((o) == IR_ALOAD || (o) == IR_HLOAD || (o) == IR_ULOAD || \ + (o) == IR_FLOAD || (o) == IR_XLOAD || (o) == IR_SLOAD || (o) == IR_VLOAD) + +/* Sparse limit checks using a red zone before the actual limit. */ +#define MCLIM_REDZONE 64 + +static LJ_NORET LJ_NOINLINE void asm_mclimit(ASMState *as) +{ + lj_mcode_limiterr(as-J, (size_t)(as-mctop - as-mcp + 4*MCLIM_REDZONE)); +} + +static LJ_AINLINE void checkmclim(ASMState *as) +{ +#ifdef LUA_USE_ASSERT + if (as-mcp + MCLIM_REDZONE as-mcp_prev) { +IRIns *ir = IR(as-curins+1); +fprintf(stderr, RED ZONE OVERFLOW: %p IR %04d %02d %04d %04d\n,
[01/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
Repository: trafficserver Updated Branches: refs/heads/6.0.x a0b75bc8e - 975c4c8ca http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/xedkbuild.bat -- diff --git a/lib/luajit/src/xedkbuild.bat b/lib/luajit/src/xedkbuild.bat new file mode 100644 index 000..240ec87 --- /dev/null +++ b/lib/luajit/src/xedkbuild.bat @@ -0,0 +1,92 @@ +@rem Script to build LuaJIT with the Xbox 360 SDK. +@rem Donated to the public domain. +@rem +@rem Open a Visual Studio .NET Command Prompt (32 bit host compiler) +@rem Then cd to this directory and run this script. + +@if not defined INCLUDE goto :FAIL +@if not defined XEDK goto :FAIL + +@setlocal +@rem Host compiler +@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE +@set LJLINK=link /nologo +@set LJMT=mt /nologo +@set DASMDIR=..\dynasm +@set DASM=%DASMDIR%\dynasm.lua +@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c + +%LJCOMPILE% host\minilua.c +@if errorlevel 1 goto :BAD +%LJLINK% /out:minilua.exe minilua.obj +@if errorlevel 1 goto :BAD +if exist minilua.exe.manifest^ + %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe + +@rem Error out for 64 bit host compiler +@minilua +@if errorlevel 8 goto :FAIL + +@set DASMFLAGS=-D GPR64 -D FRAME32 -D PPE -D SQRT -D DUALNUM +minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_ppc.dasc +@if errorlevel 1 goto :BAD + +%LJCOMPILE% /I . /I %DASMDIR% /D_XBOX_VER=200 /DLUAJIT_TARGET=LUAJIT_ARCH_PPC host\buildvm*.c +@if errorlevel 1 goto :BAD +%LJLINK% /out:buildvm.exe buildvm*.obj +@if errorlevel 1 goto :BAD +if exist buildvm.exe.manifest^ + %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe + +buildvm -m peobj -o lj_vm.obj +@if errorlevel 1 goto :BAD +buildvm -m bcdef -o lj_bcdef.h %ALL_LIB% +@if errorlevel 1 goto :BAD +buildvm -m ffdef -o lj_ffdef.h %ALL_LIB% +@if errorlevel 1 goto :BAD +buildvm -m libdef -o lj_libdef.h %ALL_LIB% +@if errorlevel 1 goto :BAD +buildvm -m recdef -o lj_recdef.h %ALL_LIB% +@if errorlevel 1 goto :BAD +buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB% +@if errorlevel 1 goto :BAD +buildvm -m folddef -o lj_folddef.h lj_opt_fold.c +@if errorlevel 1 goto :BAD + +@rem Cross compiler +@set LJCOMPILE=%XEDK%\bin\win32\cl /nologo /c /MT /O2 /W3 /GF /Gm- /GR- /GS- /Gy /openmp- /D_CRT_SECURE_NO_DEPRECATE /DNDEBUG /D_XBOX /D_LIB /DLUAJIT_USE_SYSMALLOC +@set LJLIB=%XEDK%\bin\win32\lib /nologo +@set INCLUDE=%XEDK%\include\xbox + +@if %1 neq debug goto :NODEBUG +@shift +@set LJCOMPILE=%LJCOMPILE% /Zi +:NODEBUG +@if %1==amalg goto :AMALG +%LJCOMPILE% /DLUA_BUILD_AS_DLL lj_*.c lib_*.c +@if errorlevel 1 goto :BAD +%LJLIB% /OUT:luajit20.lib lj_*.obj lib_*.obj +@if errorlevel 1 goto :BAD +@goto :NOAMALG +:AMALG +%LJCOMPILE% /DLUA_BUILD_AS_DLL ljamalg.c +@if errorlevel 1 goto :BAD +%LJLIB% /OUT:luajit20.lib ljamalg.obj lj_vm.obj +@if errorlevel 1 goto :BAD +:NOAMALG + +@del *.obj *.manifest minilua.exe buildvm.exe +@echo. +@echo === Successfully built LuaJIT for Xbox 360 === + +@goto :END +:BAD +@echo. +@echo *** +@echo *** Build FAILED -- Please check the error messages *** +@echo *** +@goto :END +:FAIL +@echo To run this script you must open a Visual Studio .NET Command Prompt +@echo (32 bit host compiler). The Xbox 360 SDK must be installed, too. +:END
[31/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lib_base.c -- diff --git a/lib/luajit/src/lib_base.c b/lib/luajit/src/lib_base.c new file mode 100644 index 000..17b9525 --- /dev/null +++ b/lib/luajit/src/lib_base.c @@ -0,0 +1,683 @@ +/* +** Base and coroutine library. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +** +** Major portions taken verbatim or adapted from the Lua interpreter. +** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h +*/ + +#include stdio.h + +#define lib_base_c +#define LUA_LIB + +#include lua.h +#include lauxlib.h +#include lualib.h + +#include lj_obj.h +#include lj_gc.h +#include lj_err.h +#include lj_debug.h +#include lj_str.h +#include lj_tab.h +#include lj_meta.h +#include lj_state.h +#if LJ_HASFFI +#include lj_ctype.h +#include lj_cconv.h +#endif +#include lj_bc.h +#include lj_ff.h +#include lj_dispatch.h +#include lj_char.h +#include lj_strscan.h +#include lj_lib.h + +/* -- Base library: checks */ + +#define LJLIB_MODULE_base + +LJLIB_ASM(assert) LJLIB_REC(.) +{ + GCstr *s; + lj_lib_checkany(L, 1); + s = lj_lib_optstr(L, 2); + if (s) +lj_err_callermsg(L, strdata(s)); + else +lj_err_caller(L, LJ_ERR_ASSERT); + return FFH_UNREACHABLE; +} + +/* ORDER LJ_T */ +LJLIB_PUSH(nil) +LJLIB_PUSH(boolean) +LJLIB_PUSH(top-1) /* boolean */ +LJLIB_PUSH(userdata) +LJLIB_PUSH(string) +LJLIB_PUSH(upval) +LJLIB_PUSH(thread) +LJLIB_PUSH(proto) +LJLIB_PUSH(function) +LJLIB_PUSH(trace) +LJLIB_PUSH(cdata) +LJLIB_PUSH(table) +LJLIB_PUSH(top-9) /* userdata */ +LJLIB_PUSH(number) +LJLIB_ASM_(type) LJLIB_REC(.) +/* Recycle the lj_lib_checkany(L, 1) from assert. */ + +/* -- Base library: iterators - */ + +/* This solves a circular dependency problem -- change FF_next_N as needed. */ +LJ_STATIC_ASSERT((int)FF_next == FF_next_N); + +LJLIB_ASM(next) +{ + lj_lib_checktab(L, 1); + return FFH_UNREACHABLE; +} + +#if LJ_52 || LJ_HASFFI +static int ffh_pairs(lua_State *L, MMS mm) +{ + TValue *o = lj_lib_checkany(L, 1); + cTValue *mo = lj_meta_lookup(L, o, mm); + if ((LJ_52 || tviscdata(o)) !tvisnil(mo)) { +L-top = o+1; /* Only keep one argument. */ +copyTV(L, L-base-1, mo); /* Replace callable. */ +return FFH_TAILCALL; + } else { +if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE); +setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1))); +if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0); +return FFH_RES(3); + } +} +#else +#define ffh_pairs(L, mm) (lj_lib_checktab(L, 1), FFH_UNREACHABLE) +#endif + +LJLIB_PUSH(lastcl) +LJLIB_ASM(pairs) +{ + return ffh_pairs(L, MM_pairs); +} + +LJLIB_NOREGUV LJLIB_ASM(ipairs_aux)LJLIB_REC(.) +{ + lj_lib_checktab(L, 1); + lj_lib_checkint(L, 2); + return FFH_UNREACHABLE; +} + +LJLIB_PUSH(lastcl) +LJLIB_ASM(ipairs) LJLIB_REC(.) +{ + return ffh_pairs(L, MM_ipairs); +} + +/* -- Base library: getters and setters --- */ + +LJLIB_ASM_(getmetatable) LJLIB_REC(.) +/* Recycle the lj_lib_checkany(L, 1) from assert. */ + +LJLIB_ASM(setmetatable)LJLIB_REC(.) +{ + GCtab *t = lj_lib_checktab(L, 1); + GCtab *mt = lj_lib_checktabornil(L, 2); + if (!tvisnil(lj_meta_lookup(L, L-base, MM_metatable))) +lj_err_caller(L, LJ_ERR_PROTMT); + setgcref(t-metatable, obj2gco(mt)); + if (mt) { lj_gc_objbarriert(L, t, mt); } + settabV(L, L-base-1, t); + return FFH_RES(1); +} + +LJLIB_CF(getfenv) +{ + GCfunc *fn; + cTValue *o = L-base; + if (!(o L-top tvisfunc(o))) { +int level = lj_lib_optint(L, 1, 1); +o = lj_debug_frame(L, level, level); +if (o == NULL) + lj_err_arg(L, 1, LJ_ERR_INVLVL); + } + fn = gcval(o)-fn; + settabV(L, L-top++, isluafunc(fn) ? tabref(fn-l.env) : tabref(L-env)); + return 1; +} + +LJLIB_CF(setfenv) +{ + GCfunc *fn; + GCtab *t = lj_lib_checktab(L, 2); + cTValue *o = L-base; + if (!(o L-top tvisfunc(o))) { +int level = lj_lib_checkint(L, 1); +if (level == 0) { + /* NOBARRIER: A thread (i.e. L) is never black. */ + setgcref(L-env, obj2gco(t)); + return 0; +} +o = lj_debug_frame(L, level, level); +if (o == NULL) + lj_err_arg(L, 1, LJ_ERR_INVLVL); + } + fn = gcval(o)-fn; + if (!isluafunc(fn)) +lj_err_caller(L, LJ_ERR_SETFENV); + setgcref(fn-l.env, obj2gco(t)); + lj_gc_objbarrier(L, obj2gco(fn), t); + setfuncV(L, L-top++, fn); + return 1; +} + +LJLIB_ASM(rawget) LJLIB_REC(.) +{ + lj_lib_checktab(L, 1); + lj_lib_checkany(L, 2); + return FFH_UNREACHABLE; +} + +LJLIB_CF(rawset) LJLIB_REC(.) +{ + lj_lib_checktab(L, 1); + lj_lib_checkany(L, 2); + L-top = 1+lj_lib_checkany(L, 3); + lua_rawset(L, 1); + return 1; +} + +LJLIB_CF(rawequal) LJLIB_REC(.) +{ + cTValue *o1 =
trafficserver git commit: TS-3800: Fix bug in hostdb ui related to missing query
Repository: trafficserver Updated Branches: refs/heads/master 0cd1ef3ed - fc133036c TS-3800: Fix bug in hostdb ui related to missing query Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/fc133036 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/fc133036 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/fc133036 Branch: refs/heads/master Commit: fc133036c2e4a6cd8d95c9432cd62e703a3303b1 Parents: 0cd1ef3 Author: Brian Geffon bri...@apache.org Authored: Tue Jul 28 20:20:57 2015 -0700 Committer: Brian Geffon bri...@apache.org Committed: Tue Jul 28 20:20:57 2015 -0700 -- iocore/hostdb/HostDB.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/fc133036/iocore/hostdb/HostDB.cc -- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index 0d36fd6..984d137 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -2672,7 +2672,7 @@ register_ShowHostDB(Continuation *c, HTTPHdr *h) } else if (STR_LEN_EQ_PREFIX(path, path_len, showall)) { int query_len = 0; const char *query = h-url_get()-query_get(query_len); -if (strstr(query, json)) { +if (query query_len strstr(query, json)) { s-output_json = true; } Debug(hostdb, dumping all hostdb records);
trafficserver git commit: [TS-3802]: fix double free of MIOBuffer in SSLNetVConnection during SPDY inactivity.
Repository: trafficserver Updated Branches: refs/heads/master 0e703e1e3 - ec7479243 [TS-3802]: fix double free of MIOBuffer in SSLNetVConnection during SPDY inactivity. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/ec747924 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/ec747924 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/ec747924 Branch: refs/heads/master Commit: ec7479243bead60a123e64dbef8b9d53fdade095 Parents: 0e703e1 Author: Sudheer Vinukonda sudhe...@yahoo-inc.com Authored: Tue Jul 28 17:59:10 2015 + Committer: Sudheer Vinukonda sudhe...@yahoo-inc.com Committed: Tue Jul 28 17:59:10 2015 + -- proxy/spdy/SpdyClientSession.cc | 8 1 file changed, 8 insertions(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ec747924/proxy/spdy/SpdyClientSession.cc -- diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc index d9db07f..60c8e20 100644 --- a/proxy/spdy/SpdyClientSession.cc +++ b/proxy/spdy/SpdyClientSession.cc @@ -482,6 +482,14 @@ spdy_process_fetch_body(TSEvent event, SpdyClientSession *sm, TSFetchSM fetch_sm void SpdyClientSession::do_io_close(int alertno) { + if (vc) { +// vc is released (null'ed) within ProxyClientSession when handling +// TS_HTTP_SSN_CLOSE_HOOK, so, reset ssl_iobuf to prevent double free +SSLNetVConnection *ssl_vc = dynamic_castSSLNetVConnection *(vc); +if (ssl_vc) { + ssl_vc-set_ssl_iobuf(NULL); +} + } // The object will be cleaned up from within ProxyClientSession::handle_api_return // This way, the object will still be alive for any SSN_CLOSE hooks do_api_callout(TS_HTTP_SSN_CLOSE_HOOK);
[03/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_ppcspe.dasc -- diff --git a/lib/luajit/src/vm_ppcspe.dasc b/lib/luajit/src/vm_ppcspe.dasc new file mode 100644 index 000..53ea2d9 --- /dev/null +++ b/lib/luajit/src/vm_ppcspe.dasc @@ -0,0 +1,3691 @@ +|// Low-level VM code for PowerPC/e500 CPUs. +|// Bytecode interpreter, fast functions and helper functions. +|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +| +|.arch ppc +|.section code_op, code_sub +| +|.actionlist build_actionlist +|.globals GLOB_ +|.globalnames globnames +|.externnames extnames +| +|// Note: The ragged indentation of the instructions is intentional. +|// The starting columns indicate data dependencies. +| +|//--- +| +|// Fixed register assignments for the interpreter. +|// Don't use: r1 = sp, r2 and r13 = reserved and/or small data area ptr +| +|// The following must be C callee-save (but BASE is often refetched). +|.define BASE, r14 // Base of current Lua stack frame. +|.define KBASE,r15 // Constants of current Lua function. +|.define PC, r16 // Next PC. +|.define DISPATCH, r17 // Opcode dispatch table. +|.define LREG, r18 // Register holding lua_State (also in SAVE_L). +|.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. +| +|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save. +|.define TISNUM, r22 +|.define TISSTR, r23 +|.define TISTAB, r24 +|.define TISFUNC, r25 +|.define TISNIL, r26 +|.define TOBIT,r27 +|.define ZERO, TOBIT // Zero in lo word. +| +|// The following temporaries are not saved across C calls, except for RA. +|.define RA, r20 // Callee-save. +|.define RB, r10 +|.define RC, r11 +|.define RD, r12 +|.define INS, r7 // Overlaps CARG5. +| +|.define TMP0, r0 +|.define TMP1, r8 +|.define TMP2, r9 +|.define TMP3, r6 // Overlaps CARG4. +| +|// Saved temporaries. +|.define SAVE0,r21 +| +|// Calling conventions. +|.define CARG1,r3 +|.define CARG2,r4 +|.define CARG3,r5 +|.define CARG4,r6 // Overlaps TMP3. +|.define CARG5,r7 // Overlaps INS. +| +|.define CRET1,r3 +|.define CRET2,r4 +| +|// Stack layout while in interpreter. Must match with lj_frame.h. +|.define SAVE_LR, 188(sp) +|.define CFRAME_SPACE, 184 // Delta for sp. +|// Back chain for sp: 184(sp) -- sp entering interpreter +|.define SAVE_r31, 176(sp) // 64 bit register saves. +|.define SAVE_r30, 168(sp) +|.define SAVE_r29, 160(sp) +|.define SAVE_r28, 152(sp) +|.define SAVE_r27, 144(sp) +|.define SAVE_r26, 136(sp) +|.define SAVE_r25, 128(sp) +|.define SAVE_r24, 120(sp) +|.define SAVE_r23, 112(sp) +|.define SAVE_r22, 104(sp) +|.define SAVE_r21, 96(sp) +|.define SAVE_r20, 88(sp) +|.define SAVE_r19, 80(sp) +|.define SAVE_r18, 72(sp) +|.define SAVE_r17, 64(sp) +|.define SAVE_r16, 56(sp) +|.define SAVE_r15, 48(sp) +|.define SAVE_r14, 40(sp) +|.define SAVE_CR, 36(sp) +|.define UNUSED1, 32(sp) +|.define SAVE_ERRF,28(sp) // 32 bit C frame info. +|.define SAVE_NRES,24(sp) +|.define SAVE_CFRAME, 20(sp) +|.define SAVE_L, 16(sp) +|.define SAVE_PC, 12(sp) +|.define SAVE_MULTRES, 8(sp) +|// Next frame lr: 4(sp) +|// Back chain for sp: 0(sp) -- sp while in interpreter +| +|.macro save_, reg; evstdd reg, SAVE_..reg; .endmacro +|.macro rest_, reg; evldd reg, SAVE_..reg; .endmacro +| +|.macro saveregs +| stwu sp, -CFRAME_SPACE(sp) +| save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 +| mflr r0; mfcr r12 +| save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 +| stw r0, SAVE_LR; stw r12, SAVE_CR +| save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 +|.endmacro +| +|.macro restoreregs +| lwz r0, SAVE_LR; lwz r12, SAVE_CR +| rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 +| mtlr r0; mtcrf 0x38, r12 +| rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 +| rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 +| addi sp, sp, CFRAME_SPACE +|.endmacro +| +|// Type definitions. Some of these are only used for documentation. +|.type L, lua_State, LREG +|.type GL, global_State +|.type TVALUE, TValue +|.type GCOBJ, GCobj +|.type STR,GCstr +|.type TAB,GCtab +|.type LFUNC, GCfuncL +|.type CFUNC, GCfuncC +|.type PROTO, GCproto +|.type UPVAL, GCupval +|.type NODE, Node +|.type NARGS8,
[39/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/running.html -- diff --git a/lib/luajit/doc/running.html b/lib/luajit/doc/running.html new file mode 100644 index 000..c6e1c29 --- /dev/null +++ b/lib/luajit/doc/running.html @@ -0,0 +1,306 @@ +!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN http://www.w3.org/TR/html4/strict.dtd; +html +head +titleRunning LuaJIT/title +meta http-equiv=Content-Type content=text/html; charset=iso-8859-1 +meta name=Author content=Mike Pall +meta name=Copyright content=Copyright (C) 2005-2015, Mike Pall +meta name=Language content=en +link rel=stylesheet type=text/css href=bluequad.css media=screen +link rel=stylesheet type=text/css href=bluequad-print.css media=print +style type=text/css +table.opt { + line-height: 1.2; +} +tr.opthead td { + font-weight: bold; +} +td.flag_name { + width: 4em; +} +td.flag_level { + width: 2em; + text-align: center; +} +td.param_name { + width: 6em; +} +td.param_default { + width: 4em; + text-align: right; +} +/style +/head +body +div id=site +a href=http://luajit.org;spanLuaspan id=logoJIT/span/span/a +/div +div id=head +h1Running LuaJIT/h1 +/div +div id=nav +ulli +a href=luajit.htmlLuaJIT/a +ulli +a href=http://luajit.org/download.html;Download span class=extraquo;/span/a +/lili +a href=install.htmlInstallation/a +/lili +a class=current href=running.htmlRunning/a +/li/ul +/lili +a href=extensions.htmlExtensions/a +ulli +a href=ext_ffi.htmlFFI Library/a +ulli +a href=ext_ffi_tutorial.htmlFFI Tutorial/a +/lili +a href=ext_ffi_api.htmlffi.* API/a +/lili +a href=ext_ffi_semantics.htmlFFI Semantics/a +/li/ul +/lili +a href=ext_jit.htmljit.* Library/a +/lili +a href=ext_c_api.htmlLua/C API/a +/li/ul +/lili +a href=status.htmlStatus/a +ulli +a href=changes.htmlChanges/a +/li/ul +/lili +a href=faq.htmlFAQ/a +/lili +a href=http://luajit.org/performance.html;Performance span class=extraquo;/span/a +/lili +a href=http://wiki.luajit.org/;Wiki span class=extraquo;/span/a +/lili +a href=http://luajit.org/list.html;Mailing List span class=extraquo;/span/a +/li/ul +/div +div id=main +p +LuaJIT has only a single stand-alone executable, called ttluajit/tt on +POSIX systems or ttluajit.exe/tt on Windows. It can be used to run simple +Lua statements or whole Lua applications from the command line. It has an +interactive mode, too. +/p + +h2 id=optionsCommand Line Options/h2 +p +The ttluajit/tt stand-alone executable is just a slightly modified +version of the regular ttlua/tt stand-alone executable. +It supports the same basic options, too. ttluajitnbsp;-h/tt +prints a short list of the available options. Please have a look at the +a href=http://www.lua.org/manual/5.1/manual.html#6;span class=extraquo;/spannbsp;Lua manual/a +for details. +/p +p +LuaJIT has some additional options: +/p + +h3 id=opt_btt-b[options] input output/tt/h3 +p +This option saves or lists bytecode. The following additional options +are accepted: +/p +ul +litt-l/tt mdash; Only list bytecode./li +litt-s/tt mdash; Strip debug info (this is the default)./li +litt-g/tt mdash; Keep debug info./li +litt-n name/tt mdash; Set module name (default: auto-detect from input name)/li +litt-t type/tt mdash; Set output file type (default: auto-detect from output name)./li +litt-a arch/tt mdash; Override architecture for object files (default: native)./li +litt-o os/tt mdash; Override OS for object files (default: native)./li +litt-e chunk/tt mdash; Use chunk string as input./li +litt-/tt (a single minus sign) mdash; Use stdin as input and/or stdout as output./li +/ul +p +The output file type is auto-detected from the extension of the output +file name: +/p +ul +littc/tt mdash; C source file, exported bytecode data./li +litth/tt mdash; C header file, static bytecode data./li +littobj/tt or tto/tt mdash; Object file, exported bytecode data +(OS- and architecture-specific)./li +littraw/tt or any other extension mdash; Raw bytecode file (portable). +/ul +p +Notes: +/p +ul +liSee also a href=extensions.html#string_dumpstring.dump()/a +for information on bytecode portability and compatibility./li +liA file in raw bytecode format is auto-detected and can be loaded like +any Lua source file. E.g. directly from the command line or with +ttloadfile()/tt, ttdofile()/tt etc./li +liTo statically embed the bytecode of a module in your application, +generate an object file and just link it with your application./li +liOn most ELF-based systems (e.g. Linux) you need to explicitly export the +global symbols when linking your application, e.g. with: tt-Wl,-E/tt/li +littrequire()/tt tries to load embedded bytecode data from exported +symbols (in tt*.exe/tt or ttlua51.dll/tt on Windows) and from +shared libraries in ttpackage.cpath/tt./li +/ul +p +Typical usage examples: +/p +pre class=code +luajit -b test.lua test.out # Save bytecode to test.out +luajit -bg test.lua test.out
[10/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_record.c -- diff --git a/lib/luajit/src/lj_record.c b/lib/luajit/src/lj_record.c new file mode 100644 index 000..843108c --- /dev/null +++ b/lib/luajit/src/lj_record.c @@ -0,0 +1,2252 @@ +/* +** Trace recorder (bytecode - SSA IR). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_record_c +#define LUA_CORE + +#include lj_obj.h + +#if LJ_HASJIT + +#include lj_err.h +#include lj_str.h +#include lj_tab.h +#include lj_meta.h +#include lj_frame.h +#if LJ_HASFFI +#include lj_ctype.h +#endif +#include lj_bc.h +#include lj_ff.h +#include lj_ir.h +#include lj_jit.h +#include lj_ircall.h +#include lj_iropt.h +#include lj_trace.h +#include lj_record.h +#include lj_ffrecord.h +#include lj_snap.h +#include lj_dispatch.h +#include lj_vm.h + +/* Some local macros to save typing. Undef'd at the end. */ +#define IR(ref)(J-cur.ir[(ref)]) + +/* Pass IR on to next optimization in chain (FOLD). */ +#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) + +/* Emit raw IR without passing through optimizations. */ +#define emitir_raw(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J)) + +/* -- Sanity checks --- */ + +#ifdef LUA_USE_ASSERT +/* Sanity check the whole IR -- slw. */ +static void rec_check_ir(jit_State *J) +{ + IRRef i, nins = J-cur.nins, nk = J-cur.nk; + lua_assert(nk = REF_BIAS nins = REF_BIAS nins 65536); + for (i = nins-1; i = nk; i--) { +IRIns *ir = IR(i); +uint32_t mode = lj_ir_mode[ir-o]; +IRRef op1 = ir-op1; +IRRef op2 = ir-op2; +switch (irm_op1(mode)) { +case IRMnone: lua_assert(op1 == 0); break; +case IRMref: lua_assert(op1 = nk); + lua_assert(i = REF_BIAS ? op1 i : op1 i); break; +case IRMlit: break; +case IRMcst: lua_assert(i REF_BIAS); continue; +} +switch (irm_op2(mode)) { +case IRMnone: lua_assert(op2 == 0); break; +case IRMref: lua_assert(op2 = nk); + lua_assert(i = REF_BIAS ? op2 i : op2 i); break; +case IRMlit: break; +case IRMcst: lua_assert(0); break; +} +if (ir-prev) { + lua_assert(ir-prev = nk); + lua_assert(i = REF_BIAS ? ir-prev i : ir-prev i); + lua_assert(ir-o == IR_NOP || IR(ir-prev)-o == ir-o); +} + } +} + +/* Compare stack slots and frames of the recorder and the VM. */ +static void rec_check_slots(jit_State *J) +{ + BCReg s, nslots = J-baseslot + J-maxslot; + int32_t depth = 0; + cTValue *base = J-L-base - J-baseslot; + lua_assert(J-baseslot = 1 J-baseslot LJ_MAX_JSLOTS); + lua_assert(J-baseslot == 1 || (J-slot[J-baseslot-1] TREF_FRAME)); + lua_assert(nslots LJ_MAX_JSLOTS); + for (s = 0; s nslots; s++) { +TRef tr = J-slot[s]; +if (tr) { + cTValue *tv = base[s]; + IRRef ref = tref_ref(tr); + IRIns *ir; + lua_assert(ref = J-cur.nk ref J-cur.nins); + ir = IR(ref); + lua_assert(irt_t(ir-t) == tref_t(tr)); + if (s == 0) { + lua_assert(tref_isfunc(tr)); + } else if ((tr TREF_FRAME)) { + GCfunc *fn = gco2func(frame_gc(tv)); + BCReg delta = (BCReg)(tv - frame_prev(tv)); + lua_assert(tref_isfunc(tr)); + if (tref_isk(tr)) lua_assert(fn == ir_kfunc(ir)); + lua_assert(s delta ? (J-slot[s-delta] TREF_FRAME) : (s == delta)); + depth++; + } else if ((tr TREF_CONT)) { + lua_assert(ir_kptr(ir) == gcrefp(tv-gcr, void)); + lua_assert((J-slot[s+1] TREF_FRAME)); + depth++; + } else { + if (tvisnumber(tv)) + lua_assert(tref_isnumber(tr)); /* Could be IRT_INT etc., too. */ + else + lua_assert(itype2irt(tv) == tref_type(tr)); + if (tref_isk(tr)) { /* Compare constants. */ + TValue tvk; + lj_ir_kvalue(J-L, tvk, ir); + if (!(tvisnum(tvk) tvisnan(tvk))) + lua_assert(lj_obj_equal(tv, tvk)); + else + lua_assert(tvisnum(tv) tvisnan(tv)); + } + } +} + } + lua_assert(J-framedepth == depth); +} +#endif + +/* -- Type handling and specialization */ + +/* Note: these functions return tagged references (TRef). */ + +/* Specialize a slot to a specific type. Note: slot can be negative! */ +static TRef sloadt(jit_State *J, int32_t slot, IRType t, int mode) +{ + /* Caller may set IRT_GUARD in t. */ + TRef ref = emitir_raw(IRT(IR_SLOAD, t), (int32_t)J-baseslot+slot, mode); + J-base[slot] = ref; + return ref; +} + +/* Specialize a slot to the runtime type. Note: slot can be negative! */ +static TRef sload(jit_State *J, int32_t slot) +{ + IRType t = itype2irt(J-L-base[slot]); + TRef ref = emitir_raw(IRTG(IR_SLOAD, t), (int32_t)J-baseslot+slot, + IRSLOAD_TYPECHECK); + if (irtype_ispri(t)) ref = TREF_PRI(t); /*
[47/62] [abbrv] trafficserver git commit: TS-3774 clang-format
TS-3774 clang-format Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5ae63a10 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5ae63a10 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5ae63a10 Branch: refs/heads/6.0.x Commit: 5ae63a109255adccadddf0e726f20d657b2ac0c0 Parents: b51a2b9 Author: Leif Hedstrom zw...@apache.org Authored: Fri Jul 24 00:07:50 2015 +0200 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 00:07:50 2015 +0200 -- iocore/hostdb/HostDB.cc | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5ae63a10/iocore/hostdb/HostDB.cc -- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index 0df0cd8..9d5ece3 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -2747,9 +2747,9 @@ ParseHostLine(RefCountedHostsFileMap *map, char *l) ts::ConstBuffer name(elts[i], strlen(elts[i])); // If we don't have an entry already (host files only support single IPs for a given name) if (map-hosts_file_map.find(name) == map-hosts_file_map.end()) { - HostsFileMap::mapped_type item = map-hosts_file_map[name]; - item.round_robin = false; - item.round_robin_elt = false; +HostsFileMap::mapped_type item = map-hosts_file_map[name]; +item.round_robin = false; +item.round_robin_elt = false; item.reverse_dns = false; item.is_srv = false; ats_ip_set(item.ip(), ip); @@ -2820,7 +2820,8 @@ ParseHostFile(char const *path) // 2) The HostDB clients (essentially the HttpSM) copies the HostDB record or data over to local storage during event processing, //which means the data only has to be valid until the event chaining rolls back up to the event processor. This will certainly //be less than 1s - // The combination of these means keeping one file back in the rotation is sufficient to keep any outstanding references valid until + // The combination of these means keeping one file back in the rotation is sufficient to keep any outstanding references valid + // until // dropped. hostDB.prev_hosts_file_ptr = hostDB.hosts_file_ptr; hostDB.hosts_file_ptr = parsed_hosts_file_ptr;
[33/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/jit/bc.lua -- diff --git a/lib/luajit/src/jit/bc.lua b/lib/luajit/src/jit/bc.lua new file mode 100644 index 000..46a4089 --- /dev/null +++ b/lib/luajit/src/jit/bc.lua @@ -0,0 +1,191 @@ + +-- LuaJIT bytecode listing module. +-- +-- Copyright (C) 2005-2015 Mike Pall. All rights reserved. +-- Released under the MIT license. See Copyright Notice in luajit.h + +-- +-- This module lists the bytecode of a Lua function. If it's loaded by -jbc +-- it hooks into the parser and lists all functions of a chunk as they +-- are parsed. +-- +-- Example usage: +-- +-- luajit -jbc -e 'local x=0; for i=1,1e6 do x=x+i end; print(x)' +-- luajit -jbc=- foo.lua +-- luajit -jbc=foo.list foo.lua +-- +-- Default output is to stderr. To redirect the output to a file, pass a +-- filename as an argument (use '-' for stdout) or set the environment +-- variable LUAJIT_LISTFILE. The file is overwritten every time the module +-- is started. +-- +-- This module can also be used programmatically: +-- +-- local bc = require(jit.bc) +-- +-- local function foo() print(hello) end +-- +-- bc.dump(foo) -- -- BYTECODE -- [...] +-- print(bc.line(foo, 2)) -- 0002KSTR 1 1 ; hello +-- +-- local out = { +-- -- Do something with each line: +-- write = function(t, ...) io.write(...) end, +-- close = function(t) end, +-- flush = function(t) end, +-- } +-- bc.dump(foo, out) +-- +-- + +-- Cache some library functions and objects. +local jit = require(jit) +assert(jit.version_num == 20004, LuaJIT core/library version mismatch) +local jutil = require(jit.util) +local vmdef = require(jit.vmdef) +local bit = require(bit) +local sub, gsub, format = string.sub, string.gsub, string.format +local byte, band, shr = string.byte, bit.band, bit.rshift +local funcinfo, funcbc, funck = jutil.funcinfo, jutil.funcbc, jutil.funck +local funcuvname = jutil.funcuvname +local bcnames = vmdef.bcnames +local stdout, stderr = io.stdout, io.stderr + +-- + +local function ctlsub(c) + if c == \n then return \\n + elseif c == \r then return \\r + elseif c == \t then return \\t + else return format(\\%03d, byte(c)) + end +end + +-- Return one bytecode line. +local function bcline(func, pc, prefix) + local ins, m = funcbc(func, pc) + if not ins then return end + local ma, mb, mc = band(m, 7), band(m, 15*8), band(m, 15*128) + local a = band(shr(ins, 8), 0xff) + local oidx = 6*band(ins, 0xff) + local op = sub(bcnames, oidx+1, oidx+6) + local s = format(%04d %s %-6s %3s , +pc, prefix or , op, ma == 0 and or a) + local d = shr(ins, 16) + if mc == 13*128 then -- BCMjump +return format(%s= %04d\n, s, pc+d-0x7fff) + end + if mb ~= 0 then +d = band(d, 0xff) + elseif mc == 0 then +return s..\n + end + local kc + if mc == 10*128 then -- BCMstr +kc = funck(func, -d-1) +kc = format(#kc 40 and '%.40s~' or '%s', gsub(kc, %c, ctlsub)) + elseif mc == 9*128 then -- BCMnum +kc = funck(func, d) +if op == TSETM then kc = kc - 2^52 end + elseif mc == 12*128 then -- BCMfunc +local fi = funcinfo(funck(func, -d-1)) +if fi.ffid then + kc = vmdef.ffnames[fi.ffid] +else + kc = fi.loc +end + elseif mc == 5*128 then -- BCMuv +kc = funcuvname(func, d) + end + if ma == 5 then -- BCMuv +local ka = funcuvname(func, a) +if kc then kc = ka.. ; ..kc else kc = ka end + end + if mb ~= 0 then +local b = shr(ins, 24) +if kc then return format(%s%3d %3d ; %s\n, s, b, d, kc) end +return format(%s%3d %3d\n, s, b, d) + end + if kc then return format(%s%3d ; %s\n, s, d, kc) end + if mc == 7*128 and d 32767 then d = d - 65536 end -- BCMlits + return format(%s%3d\n, s, d) +end + +-- Collect branch targets of a function. +local function bctargets(func) + local target = {} + for pc=1,10 do +local ins, m = funcbc(func, pc) +if not ins then break end +if band(m, 15*128) == 13*128 then target[pc+shr(ins, 16)-0x7fff] = true end + end + return target +end + +-- Dump bytecode instructions of a function. +local function bcdump(func, out, all) + if not out then out = stdout end + local fi = funcinfo(func) + if all and fi.children then +for n=-1,-10,-1 do + local k = funck(func, n) + if not k then break end + if type(k) == proto then bcdump(k, out, true) end +end + end + out:write(format(-- BYTECODE -- %s-%d\n, fi.loc, fi.lastlinedefined)) + local target = bctargets(func) + for pc=1,10 do +local s = bcline(func, pc, target[pc] and =) +
[36/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dynasm.lua -- diff --git a/lib/luajit/dynasm/dynasm.lua b/lib/luajit/dynasm/dynasm.lua new file mode 100644 index 000..fffda75 --- /dev/null +++ b/lib/luajit/dynasm/dynasm.lua @@ -0,0 +1,1094 @@ +-- +-- DynASM. A dynamic assembler for code generation engines. +-- Originally designed and implemented for LuaJIT. +-- +-- Copyright (C) 2005-2015 Mike Pall. All rights reserved. +-- See below for full copyright notice. +-- + +-- Application information. +local _info = { + name = DynASM, + description =A dynamic assembler for code generation engines, + version =1.3.0, + vernum = 10300, + release =2011-05-05, + author = Mike Pall, + url =http://luajit.org/dynasm.html;, + license =MIT, + copyright = [[ +Copyright (C) 2005-2015 Mike Pall. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +Software), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +[ MIT license: http://www.opensource.org/licenses/mit-license.php ] +]], +} + +-- Cache library functions. +local type, pairs, ipairs = type, pairs, ipairs +local pcall, error, assert = pcall, error, assert +local _s = string +local sub, match, gmatch, gsub = _s.sub, _s.match, _s.gmatch, _s.gsub +local format, rep, upper = _s.format, _s.rep, _s.upper +local _t = table +local insert, remove, concat, sort = _t.insert, _t.remove, _t.concat, _t.sort +local exit = os.exit +local io = io +local stdin, stdout, stderr = io.stdin, io.stdout, io.stderr + +-- + +-- Program options. +local g_opt = {} + +-- Global state for current file. +local g_fname, g_curline, g_indent, g_lineno, g_synclineno, g_arch +local g_errcount = 0 + +-- Write buffer for output file. +local g_wbuffer, g_capbuffer + +-- + +-- Write an output line (or callback function) to the buffer. +local function wline(line, needindent) + local buf = g_capbuffer or g_wbuffer + buf[#buf+1] = needindent and g_indent..line or line + g_synclineno = g_synclineno + 1 +end + +-- Write assembler line as a comment, if requestd. +local function wcomment(aline) + if g_opt.comment then +wline(g_opt.comment..aline..g_opt.endcomment, true) + end +end + +-- Resync CPP line numbers. +local function wsync() + if g_synclineno ~= g_lineno and g_opt.cpp then +wline(#line ..g_lineno..' '..g_fname..'') +g_synclineno = g_lineno + end +end + +-- Dummy action flush function. Replaced with arch-specific function later. +local function wflush(term) +end + +-- Dump all buffered output lines. +local function wdumplines(out, buf) + for _,line in ipairs(buf) do +if type(line) == string then + assert(out:write(line, \n)) +else + -- Special callback to dynamically insert lines after end of processing. + line(out) +end + end +end + +-- + +-- Emit an error. Processing continues with next statement. +local function werror(msg) + error(format(%s:%s: error: %s:\n%s, g_fname, g_lineno, msg, g_curline), 0) +end + +-- Emit a fatal error. Processing stops. +local function wfatal(msg) + g_errcount = fatal + werror(msg) +end + +-- Print a warning. Processing continues. +local function wwarn(msg) + stderr:write(format(%s:%s: warning: %s:\n%s\n, +g_fname, g_lineno, msg, g_curline)) +end + +-- Print caught error message. But suppress excessive errors. +local function wprinterr(...) + if type(g_errcount) == number then +-- Regular error. +g_errcount = g_errcount + 1 +if g_errcount 21 then -- Seems to be a reasonable limit. + stderr:write(...) +elseif g_errcount == 21 then
[46/62] [abbrv] trafficserver git commit: [TS-3794]: call spdy_process_read on early read from handshake.
[TS-3794]: call spdy_process_read on early read from handshake. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/b51a2b97 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b51a2b97 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b51a2b97 Branch: refs/heads/6.0.x Commit: b51a2b977017d0d94e751d7e2c543d71a457c159 Parents: c36204d Author: Sudheer Vinukonda sudhe...@yahoo-inc.com Authored: Thu Jul 23 21:51:09 2015 + Committer: Sudheer Vinukonda sudhe...@yahoo-inc.com Committed: Thu Jul 23 21:51:09 2015 + -- proxy/spdy/SpdyClientSession.cc | 8 1 file changed, 4 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b51a2b97/proxy/spdy/SpdyClientSession.cc -- diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc index 33c87bf..d9db07f 100644 --- a/proxy/spdy/SpdyClientSession.cc +++ b/proxy/spdy/SpdyClientSession.cc @@ -208,13 +208,13 @@ SpdyClientSession::start() {SPDYLAY_SETTINGS_INITIAL_WINDOW_SIZE, SPDYLAY_ID_FLAG_SETTINGS_NONE, spdy_initial_window_size}}; int r; - if (this-write_vio (TSIOBufferReaderAvail(this-req_reader) 0)) { -spdy_process_read(TS_EVENT_VCONN_WRITE_READY, this); - } - this-read_vio = (TSVIO) this-vc-do_io_read(this, INT64_MAX, reinterpret_castMIOBuffer *(this-req_buffer)); this-write_vio = (TSVIO) this-vc-do_io_write(this, INT64_MAX, reinterpret_castIOBufferReader *(this-resp_reader)); + if (TSIOBufferReaderAvail(this-req_reader) 0) { +spdy_process_read(TS_EVENT_VCONN_WRITE_READY, this); + } + SET_HANDLER(SpdyClientSession::state_session_readwrite); r = spdylay_submit_settings(this-session, SPDYLAY_FLAG_SETTINGS_NONE, entries, countof(entries));
[37/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dasm_x86.h -- diff --git a/lib/luajit/dynasm/dasm_x86.h b/lib/luajit/dynasm/dasm_x86.h new file mode 100644 index 000..652e8c9 --- /dev/null +++ b/lib/luajit/dynasm/dasm_x86.h @@ -0,0 +1,471 @@ +/* +** DynASM x86 encoding engine. +** Copyright (C) 2005-2015 Mike Pall. All rights reserved. +** Released under the MIT license. See dynasm.lua for full copyright notice. +*/ + +#include stddef.h +#include stdarg.h +#include string.h +#include stdlib.h + +#define DASM_ARCH x86 + +#ifndef DASM_EXTERN +#define DASM_EXTERN(a,b,c,d) 0 +#endif + +/* Action definitions. DASM_STOP must be 255. */ +enum { + DASM_DISP = 233, + DASM_IMM_S, DASM_IMM_B, DASM_IMM_W, DASM_IMM_D, DASM_IMM_WB, DASM_IMM_DB, + DASM_VREG, DASM_SPACE, DASM_SETLABEL, DASM_REL_A, DASM_REL_LG, DASM_REL_PC, + DASM_IMM_LG, DASM_IMM_PC, DASM_LABEL_LG, DASM_LABEL_PC, DASM_ALIGN, + DASM_EXTERN, DASM_ESC, DASM_MARK, DASM_SECTION, DASM_STOP +}; + +/* Maximum number of section buffer positions for a single dasm_put() call. */ +#define DASM_MAXSECPOS 25 + +/* DynASM encoder status codes. Action list offset or number are or'ed in. */ +#define DASM_S_OK 0x +#define DASM_S_NOMEM 0x0100 +#define DASM_S_PHASE 0x0200 +#define DASM_S_MATCH_SEC 0x0300 +#define DASM_S_RANGE_I 0x1100 +#define DASM_S_RANGE_SEC 0x1200 +#define DASM_S_RANGE_LG0x1300 +#define DASM_S_RANGE_PC0x1400 +#define DASM_S_RANGE_VREG 0x1500 +#define DASM_S_UNDEF_L 0x2100 +#define DASM_S_UNDEF_PC0x2200 + +/* Macros to convert positions (8 bit section + 24 bit index). */ +#define DASM_POS2IDX(pos) ((pos)0x00ff) +#define DASM_POS2BIAS(pos) ((pos)0xff00) +#define DASM_SEC2POS(sec) ((sec)24) +#define DASM_POS2SEC(pos) ((pos)24) +#define DASM_POS2PTR(D, pos) (D-sections[DASM_POS2SEC(pos)].rbuf + (pos)) + +/* Action list type. */ +typedef const unsigned char *dasm_ActList; + +/* Per-section structure. */ +typedef struct dasm_Section { + int *rbuf; /* Biased buffer pointer (negative section bias). */ + int *buf;/* True buffer pointer. */ + size_t bsize;/* Buffer size in bytes. */ + int pos; /* Biased buffer position. */ + int epos;/* End of biased buffer position - max single put. */ + int ofs; /* Byte offset into section. */ +} dasm_Section; + +/* Core structure holding the DynASM encoding state. */ +struct dasm_State { + size_t psize;/* Allocated size of this structure. */ + dasm_ActList actionlist; /* Current actionlist pointer. */ + int *lglabels; /* Local/global chain/pos ptrs. */ + size_t lgsize; + int *pclabels; /* PC label chains/pos ptrs. */ + size_t pcsize; + void **globals; /* Array of globals (bias -10). */ + dasm_Section *section; /* Pointer to active section. */ + size_t codesize; /* Total size of all code sections. */ + int maxsection; /* 0 = sectionidx maxsection. */ + int status; /* Status code. */ + dasm_Section sections[1];/* All sections. Alloc-extended. */ +}; + +/* The size of the core structure depends on the max. number of sections. */ +#define DASM_PSZ(ms) (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section)) + + +/* Initialize DynASM state. */ +void dasm_init(Dst_DECL, int maxsection) +{ + dasm_State *D; + size_t psz = 0; + int i; + Dst_REF = NULL; + DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection)); + D = Dst_REF; + D-psize = psz; + D-lglabels = NULL; + D-lgsize = 0; + D-pclabels = NULL; + D-pcsize = 0; + D-globals = NULL; + D-maxsection = maxsection; + for (i = 0; i maxsection; i++) { +D-sections[i].buf = NULL; /* Need this for pass3. */ +D-sections[i].rbuf = D-sections[i].buf - DASM_SEC2POS(i); +D-sections[i].bsize = 0; +D-sections[i].epos = 0; /* Wrong, but is recalculated after resize. */ + } +} + +/* Free DynASM state. */ +void dasm_free(Dst_DECL) +{ + dasm_State *D = Dst_REF; + int i; + for (i = 0; i D-maxsection; i++) +if (D-sections[i].buf) + DASM_M_FREE(Dst, D-sections[i].buf, D-sections[i].bsize); + if (D-pclabels) DASM_M_FREE(Dst, D-pclabels, D-pcsize); + if (D-lglabels) DASM_M_FREE(Dst, D-lglabels, D-lgsize); + DASM_M_FREE(Dst, D, D-psize); +} + +/* Setup global label array. Must be called before dasm_setup(). */ +void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl) +{ + dasm_State *D = Dst_REF; + D-globals = gl - 10; /* Negative bias to compensate for locals. */ + DASM_M_GROW(Dst, int, D-lglabels, D-lgsize, (10+maxgl)*sizeof(int)); +} + +/* Grow PC label array. Can be called after dasm_setup(), too. */ +void
[52/62] [abbrv] trafficserver git commit: TS-3030 Restore the autoreconf -if ...
TS-3030 Restore the autoreconf -if ... Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/f40bd7ca Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/f40bd7ca Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/f40bd7ca Branch: refs/heads/6.0.x Commit: f40bd7ca3c2575d1cd087c6cc69f570415eb071d Parents: bfddad1 Author: Leif Hedstrom zw...@apache.org Authored: Fri Jul 24 02:47:04 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 02:47:04 2015 -0600 -- Makefile.am | 1 + 1 file changed, 1 insertion(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f40bd7ca/Makefile.am -- diff --git a/Makefile.am b/Makefile.am index 2b6cbdd..35ba197 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,6 +68,7 @@ asf-dist-rc: asf-distdir asf-distdir: @$(am__remove_distdir) test -d .git git clone . $(distdir) + cd $(distdir) autoreconf -i $(RM) -r -- $(distdir)/autom4te.cache $(distdir)/ci `find $(distdir) -name .git -o -name .gitignore -o -name .gitmodules` asf-dist-sign: asf-dist
[25/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_ppc.h -- diff --git a/lib/luajit/src/lj_asm_ppc.h b/lib/luajit/src/lj_asm_ppc.h new file mode 100644 index 000..2c5d74a --- /dev/null +++ b/lib/luajit/src/lj_asm_ppc.h @@ -0,0 +1,2169 @@ +/* +** PPC IR assembler (SSA IR - machine code). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* -- Register allocator extensions --- */ + +/* Allocate a register with a hint. */ +static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) +{ + Reg r = IR(ref)-r; + if (ra_noreg(r)) { +if (!ra_hashint(r) !iscrossref(as, ref)) + ra_sethint(IR(ref)-r, hint); /* Propagate register hint. */ +r = ra_allocref(as, ref, allow); + } + ra_noweak(as, r); + return r; +} + +/* Allocate two source registers for three-operand instructions. */ +static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) +{ + IRIns *irl = IR(ir-op1), *irr = IR(ir-op2); + Reg left = irl-r, right = irr-r; + if (ra_hasreg(left)) { +ra_noweak(as, left); +if (ra_noreg(right)) + right = ra_allocref(as, ir-op2, rset_exclude(allow, left)); +else + ra_noweak(as, right); + } else if (ra_hasreg(right)) { +ra_noweak(as, right); +left = ra_allocref(as, ir-op1, rset_exclude(allow, right)); + } else if (ra_hashint(right)) { +right = ra_allocref(as, ir-op2, allow); +left = ra_alloc1(as, ir-op1, rset_exclude(allow, right)); + } else { +left = ra_allocref(as, ir-op1, allow); +right = ra_alloc1(as, ir-op2, rset_exclude(allow, left)); + } + return left | (right 8); +} + +/* -- Guard handling -- */ + +/* Setup exit stubs after the end of each trace. */ +static void asm_exitstub_setup(ASMState *as, ExitNo nexits) +{ + ExitNo i; + MCode *mxp = as-mctop; + if (mxp - (nexits + 3 + MCLIM_REDZONE) as-mclim) +asm_mclimit(as); + /* 1: mflr r0; bl -vm_exit_handler; li r0, traceno; bl 1; bl 1; ... */ + for (i = nexits-1; (int32_t)i = 0; i--) +*--mxp = PPCI_BL|(((-3-i)0x00ffu)2); + *--mxp = PPCI_LI|PPCF_T(RID_TMP)|as-T-traceno; /* Read by exit handler. */ + mxp--; + *mxp = PPCI_BL|MCode *)(void *)lj_vm_exit_handler-mxp)0x00ffu)2); + *--mxp = PPCI_MFLR|PPCF_T(RID_TMP); + as-mctop = mxp; +} + +static MCode *asm_exitstub_addr(ASMState *as, ExitNo exitno) +{ + /* Keep this in-sync with exitstub_trace_addr(). */ + return as-mctop + exitno + 3; +} + +/* Emit conditional branch to exit for guard. */ +static void asm_guardcc(ASMState *as, PPCCC cc) +{ + MCode *target = asm_exitstub_addr(as, as-snapno); + MCode *p = as-mcp; + if (LJ_UNLIKELY(p == as-invmcp)) { +as-loopinv = 1; +*p = PPCI_B | (((target-p) 0x00ffu) 2); +emit_condbranch(as, PPCI_BC, cc^4, p); +return; + } + emit_condbranch(as, PPCI_BC, cc, target); +} + +/* -- Operand fusion -- */ + +/* Limit linear search to this distance. Avoids O(n^2) behavior. */ +#define CONFLICT_SEARCH_LIM31 + +/* Check if there's no conflicting instruction between curins and ref. */ +static int noconflict(ASMState *as, IRRef ref, IROp conflict) +{ + IRIns *ir = as-ir; + IRRef i = as-curins; + if (i ref + CONFLICT_SEARCH_LIM) +return 0; /* Give up, ref is too far away. */ + while (--i ref) +if (ir[i].o == conflict) + return 0; /* Conflict found. */ + return 1; /* Ok, no conflict. */ +} + +/* Fuse the array base of colocated arrays. */ +static int32_t asm_fuseabase(ASMState *as, IRRef ref) +{ + IRIns *ir = IR(ref); + if (ir-o == IR_TNEW ir-op1 = LJ_MAX_COLOSIZE + !neverfuse(as) noconflict(as, ref, IR_NEWREF)) +return (int32_t)sizeof(GCtab); + return 0; +} + +/* Indicates load/store indexed is ok. */ +#define AHUREF_LSX ((int32_t)0x8000) + +/* Fuse array/hash/upvalue reference into register+offset operand. */ +static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow) +{ + IRIns *ir = IR(ref); + if (ra_noreg(ir-r)) { +if (ir-o == IR_AREF) { + if (mayfuse(as, ref)) { + if (irref_isk(ir-op2)) { + IRRef tab = IR(ir-op1)-op1; + int32_t ofs = asm_fuseabase(as, tab); + IRRef refa = ofs ? tab : ir-op1; + ofs += 8*IR(ir-op2)-i; + if (checki16(ofs)) { + *ofsp = ofs; + return ra_alloc1(as, refa, allow); + } + } + if (*ofsp == AHUREF_LSX) { + Reg base = ra_alloc1(as, ir-op1, allow); + Reg idx = ra_alloc1(as, ir-op2, rset_exclude(RSET_GPR, base)); + return base | (idx 8); + } + } +} else if (ir-o == IR_HREFK) { + if (mayfuse(as, ref)) { + int32_t ofs = (int32_t)(IR(ir-op2)-op2 * sizeof(Node)); + if (checki16(ofs)) { + *ofsp = ofs; + return ra_alloc1(as, ir-op1,
[12/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_split.c -- diff --git a/lib/luajit/src/lj_opt_split.c b/lib/luajit/src/lj_opt_split.c new file mode 100644 index 000..1cee509 --- /dev/null +++ b/lib/luajit/src/lj_opt_split.c @@ -0,0 +1,731 @@ +/* +** SPLIT: Split 64 bit IR instructions into 32 bit IR instructions. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_opt_split_c +#define LUA_CORE + +#include lj_obj.h + +#if LJ_HASJIT (LJ_SOFTFP || (LJ_32 LJ_HASFFI)) + +#include lj_err.h +#include lj_str.h +#include lj_ir.h +#include lj_jit.h +#include lj_ircall.h +#include lj_iropt.h +#include lj_vm.h + +/* SPLIT pass: +** +** This pass splits up 64 bit IR instructions into multiple 32 bit IR +** instructions. It's only active for soft-float targets or for 32 bit CPUs +** which lack native 64 bit integer operations (the FFI is currently the +** only emitter for 64 bit integer instructions). +** +** Splitting the IR in a separate pass keeps each 32 bit IR assembler +** backend simple. Only a small amount of extra functionality needs to be +** implemented. This is much easier than adding support for allocating +** register pairs to each backend (believe me, I tried). A few simple, but +** important optimizations can be performed by the SPLIT pass, which would +** be tedious to do in the backend. +** +** The basic idea is to replace each 64 bit IR instruction with its 32 bit +** equivalent plus an extra HIOP instruction. The splitted IR is not passed +** through FOLD or any other optimizations, so each HIOP is guaranteed to +** immediately follow it's counterpart. The actual functionality of HIOP is +** inferred from the previous instruction. +** +** The operands of HIOP hold the hiword input references. The output of HIOP +** is the hiword output reference, which is also used to hold the hiword +** register or spill slot information. The register allocator treats this +** instruction independently of any other instruction, which improves code +** quality compared to using fixed register pairs. +** +** It's easier to split up some instructions into two regular 32 bit +** instructions. E.g. XLOAD is split up into two XLOADs with two different +** addresses. Obviously 64 bit constants need to be split up into two 32 bit +** constants, too. Some hiword instructions can be entirely omitted, e.g. +** when zero-extending a 32 bit value to 64 bits. 64 bit arguments for calls +** are split up into two 32 bit arguments each. +** +** On soft-float targets, floating-point instructions are directly converted +** to soft-float calls by the SPLIT pass (except for comparisons and MIN/MAX). +** HIOP for number results has the type IRT_SOFTFP (sfp in -jdump). +** +** Here's the IR and x64 machine code for 'x.b = x.a + 1' for a struct with +** two int64_t fields: +** +** 0100p32 ADDbase +8 +** 0101i64 XLOAD 0100 +** 0102i64 ADD0101 +1 +** 0103p32 ADDbase +16 +** 0104i64 XSTORE 0103 0102 +** +** mov rax, [esi+0x8] +** add rax, +0x01 +** mov [esi+0x10], rax +** +** Here's the transformed IR and the x86 machine code after the SPLIT pass: +** +** 0100p32 ADDbase +8 +** 0101int XLOAD 0100 +** 0102p32 ADDbase +12 +** 0103int XLOAD 0102 +** 0104int ADD0101 +1 +** 0105int HIOP 0103 +0 +** 0106p32 ADDbase +16 +** 0107int XSTORE 0106 0104 +** 0108int HIOP 0106 0105 +** +** mov eax, [esi+0x8] +** mov ecx, [esi+0xc] +** add eax, +0x01 +** adc ecx, +0x00 +** mov [esi+0x10], eax +** mov [esi+0x14], ecx +** +** You may notice the reassociated hiword address computation, which is +** later fused into the mov operands by the assembler. +*/ + +/* Some local macros to save typing. Undef'd at the end. */ +#define IR(ref)(J-cur.ir[(ref)]) + +/* Directly emit the transformed IR without updating chains etc. */ +static IRRef split_emit(jit_State *J, uint16_t ot, IRRef1 op1, IRRef1 op2) +{ + IRRef nref = lj_ir_nextins(J); + IRIns *ir = IR(nref); + ir-ot = ot; + ir-op1 = op1; + ir-op2 = op2; + return nref; +} + +#if LJ_SOFTFP +/* Emit a (checked) number to integer conversion. */ +static IRRef split_num2int(jit_State *J, IRRef lo, IRRef hi, int check) +{ + IRRef tmp, res; +#if LJ_LE + tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), lo, hi); +#else + tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hi, lo); +#endif + res = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_softfp_d2i); + if (check) { +tmp = split_emit(J, IRTI(IR_CALLN), res, IRCALL_softfp_i2d); +split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); +split_emit(J, IRTGI(IR_EQ), tmp, lo); +split_emit(J, IRTG(IR_HIOP, IRT_SOFTFP), tmp+1, hi); + } + return res; +} + +/* Emit a CALLN with one split 64 bit argument. */ +static IRRef
[16/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ir.h -- diff --git a/lib/luajit/src/lj_ir.h b/lib/luajit/src/lj_ir.h new file mode 100644 index 000..8126482 --- /dev/null +++ b/lib/luajit/src/lj_ir.h @@ -0,0 +1,551 @@ +/* +** SSA IR (Intermediate Representation) format. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_IR_H +#define _LJ_IR_H + +#include lj_obj.h + +/* -- IR instructions - */ + +/* IR instruction definition. Order matters, see below. ORDER IR */ +#define IRDEF(_) \ + /* Guarded assertions. */ \ + /* Must be properly aligned to flip opposites (^1) and (un)ordered (^4). */ \ + _(LT,N , ref, ref) \ + _(GE,N , ref, ref) \ + _(LE,N , ref, ref) \ + _(GT,N , ref, ref) \ + \ + _(ULT, N , ref, ref) \ + _(UGE, N , ref, ref) \ + _(ULE, N , ref, ref) \ + _(UGT, N , ref, ref) \ + \ + _(EQ,C , ref, ref) \ + _(NE,C , ref, ref) \ + \ + _(ABC, N , ref, ref) \ + _(RETF, S , ref, ref) \ + \ + /* Miscellaneous ops. */ \ + _(NOP, N , ___, ___) \ + _(BASE, N , lit, lit) \ + _(PVAL, N , lit, ___) \ + _(GCSTEP,S , ___, ___) \ + _(HIOP, S , ref, ref) \ + _(LOOP, S , ___, ___) \ + _(USE, S , ref, ___) \ + _(PHI, S , ref, ref) \ + _(RENAME,S , ref, lit) \ + \ + /* Constants. */ \ + _(KPRI, N , ___, ___) \ + _(KINT, N , cst, ___) \ + _(KGC, N , cst, ___) \ + _(KPTR, N , cst, ___) \ + _(KKPTR, N , cst, ___) \ + _(KNULL, N , cst, ___) \ + _(KNUM, N , cst, ___) \ + _(KINT64,N , cst, ___) \ + _(KSLOT, N , ref, lit) \ + \ + /* Bit ops. */ \ + _(BNOT, N , ref, ___) \ + _(BSWAP, N , ref, ___) \ + _(BAND, C , ref, ref) \ + _(BOR, C , ref, ref) \ + _(BXOR, C , ref, ref) \ + _(BSHL, N , ref, ref) \ + _(BSHR, N , ref, ref) \ + _(BSAR, N , ref, ref) \ + _(BROL, N , ref, ref) \ + _(BROR, N , ref, ref) \ + \ + /* Arithmetic ops. ORDER ARITH */ \ + _(ADD, C , ref, ref) \ + _(SUB, N , ref, ref) \ + _(MUL, C , ref, ref) \ + _(DIV, N , ref, ref) \ + _(MOD, N , ref, ref) \ + _(POW, N , ref, ref) \ + _(NEG, N , ref, ref) \ + \ + _(ABS, N , ref, ref) \ + _(ATAN2, N , ref, ref) \ + _(LDEXP, N , ref, ref) \ + _(MIN, C , ref, ref) \ + _(MAX, C , ref, ref) \ + _(FPMATH,N , ref, lit) \ + \ + /* Overflow-checking arithmetic ops. */ \ + _(ADDOV, CW, ref, ref) \ + _(SUBOV, NW, ref, ref) \ + _(MULOV, CW, ref, ref) \ + \ + /* Memory ops. A = array, H = hash, U = upvalue, F = field, S = stack. */ \ + \ + /* Memory references. */ \ + _(AREF, R , ref, ref) \ + _(HREFK, R , ref, ref) \ + _(HREF, L , ref, ref) \ + _(NEWREF,S , ref, ref) \ + _(UREFO, LW, ref, lit) \ + _(UREFC, LW, ref, lit) \ + _(FREF, R , ref, lit) \ + _(STRREF,N , ref, ref) \ + \ + /* Loads and Stores. These must be in the same order. */ \ + _(ALOAD, L , ref, ___) \ + _(HLOAD, L , ref, ___) \ + _(ULOAD, L , ref, ___) \ + _(FLOAD, L , ref, lit) \ + _(XLOAD, L , ref, lit) \ + _(SLOAD, L , lit, lit) \ + _(VLOAD, L , ref, ___) \ + \ + _(ASTORE,S , ref, ref) \ + _(HSTORE,S , ref, ref) \ + _(USTORE,S , ref, ref) \ + _(FSTORE,S , ref, ref) \ + _(XSTORE,S , ref, ref) \ + \ + /* Allocations. */ \ + _(SNEW, N , ref, ref) /* CSE is ok, not marked as A. */ \ + _(XSNEW, A , ref, ref) \ + _(TNEW, AW, lit, lit) \ + _(TDUP, AW, ref, ___) \ + _(CNEW, AW, ref, ref) \ + _(CNEWI, NW, ref, ref) /* CSE is ok, not marked as A. */ \ + \ + /* Barriers. */ \ + _(TBAR, S , ref, ___) \ + _(OBAR, S , ref, ref) \ + _(XBAR, S , ___, ___) \ + \ + /* Type conversions. */ \ + _(CONV, NW, ref, lit) \ + _(TOBIT, N , ref, ref) \ + _(TOSTR, N , ref, ___) \ + _(STRTO, N , ref, ___) \ + \ + /* Calls. */ \ + _(CALLN, N , ref, lit) \ + _(CALLL, L , ref, lit) \ + _(CALLS, S , ref, lit) \ + _(CALLXS,S , ref, ref) \ + _(CARG, N , ref, ref) \ + \ + /* End of list. */ + +/* IR opcodes (max. 256). */ +typedef enum { +#define IRENUM(name, m, m1, m2)IR_##name, +IRDEF(IRENUM) +#undef IRENUM + IR__MAX +} IROp; + +/* Stored opcode. */ +typedef uint8_t IROp1; + +LJ_STATIC_ASSERT(((int)IR_EQ^1) == (int)IR_NE); +LJ_STATIC_ASSERT(((int)IR_LT^1) == (int)IR_GE); +LJ_STATIC_ASSERT(((int)IR_LE^1) == (int)IR_GT); +LJ_STATIC_ASSERT(((int)IR_LT^3) == (int)IR_GT); +LJ_STATIC_ASSERT(((int)IR_LT^4) == (int)IR_ULT); + +/* Delta between xLOAD and xSTORE. */ +#define IRDELTA_L2S((int)IR_ASTORE -
[42/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
TS-3783 TS-3030 Add luajit v2.0.4 as a subtree Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1f27b840 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1f27b840 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1f27b840 Branch: refs/heads/6.0.x Commit: 1f27b84077756cc0a0ad07459ba59797bec826d9 Parents: 0faed06 Author: Leif Hedstrom zw...@apache.org Authored: Thu Jul 23 12:45:57 2015 +0200 Committer: Leif Hedstrom zw...@apache.org Committed: Thu Jul 23 13:03:18 2015 +0200 -- lib/luajit/.gitignore | 11 + lib/luajit/COPYRIGHT | 56 + lib/luajit/Makefile | 151 + lib/luajit/README | 16 + lib/luajit/doc/bluequad-print.css | 166 + lib/luajit/doc/bluequad.css | 325 ++ lib/luajit/doc/changes.html | 978 lib/luajit/doc/contact.html | 102 + lib/luajit/doc/ext_c_api.html | 187 + lib/luajit/doc/ext_ffi.html | 330 ++ lib/luajit/doc/ext_ffi_api.html | 566 ++ lib/luajit/doc/ext_ffi_semantics.html | 1245 + lib/luajit/doc/ext_ffi_tutorial.html | 601 +++ lib/luajit/doc/ext_jit.html | 199 + lib/luajit/doc/extensions.html| 408 ++ lib/luajit/doc/faq.html | 184 + lib/luajit/doc/img/contact.png| Bin 0 - 1340 bytes lib/luajit/doc/install.html | 646 +++ lib/luajit/doc/luajit.html| 234 + lib/luajit/doc/running.html | 306 ++ lib/luajit/doc/status.html| 116 + lib/luajit/dynasm/dasm_arm.h | 456 ++ lib/luajit/dynasm/dasm_arm.lua| 1125 lib/luajit/dynasm/dasm_mips.h | 416 ++ lib/luajit/dynasm/dasm_mips.lua | 953 lib/luajit/dynasm/dasm_ppc.h | 412 ++ lib/luajit/dynasm/dasm_ppc.lua| 1249 + lib/luajit/dynasm/dasm_proto.h| 83 + lib/luajit/dynasm/dasm_x64.lua| 12 + lib/luajit/dynasm/dasm_x86.h | 471 ++ lib/luajit/dynasm/dasm_x86.lua| 1945 +++ lib/luajit/dynasm/dynasm.lua | 1094 lib/luajit/etc/luajit.1 | 88 + lib/luajit/etc/luajit.pc | 25 + lib/luajit/src/.gitignore |7 + lib/luajit/src/Makefile | 684 +++ lib/luajit/src/Makefile.dep | 226 + lib/luajit/src/host/.gitignore|3 + lib/luajit/src/host/README|4 + lib/luajit/src/host/buildvm.c | 516 ++ lib/luajit/src/host/buildvm.h | 104 + lib/luajit/src/host/buildvm_asm.c | 313 ++ lib/luajit/src/host/buildvm_fold.c| 229 + lib/luajit/src/host/buildvm_lib.c | 398 ++ lib/luajit/src/host/buildvm_peobj.c | 368 ++ lib/luajit/src/host/genminilua.lua| 428 ++ lib/luajit/src/host/minilua.c | 7770 lib/luajit/src/jit/.gitignore |1 + lib/luajit/src/jit/bc.lua | 191 + lib/luajit/src/jit/bcsave.lua | 659 +++ lib/luajit/src/jit/dis_arm.lua| 689 +++ lib/luajit/src/jit/dis_mips.lua | 428 ++ lib/luajit/src/jit/dis_mipsel.lua | 20 + lib/luajit/src/jit/dis_ppc.lua| 591 +++ lib/luajit/src/jit/dis_x64.lua| 20 + lib/luajit/src/jit/dis_x86.lua| 836 +++ lib/luajit/src/jit/dump.lua | 699 +++ lib/luajit/src/jit/v.lua | 167 + lib/luajit/src/lauxlib.h | 167 + lib/luajit/src/lib_aux.c | 356 ++ lib/luajit/src/lib_base.c | 683 +++ lib/luajit/src/lib_bit.c | 74 + lib/luajit/src/lib_debug.c| 405 ++ lib/luajit/src/lib_ffi.c | 851 +++ lib/luajit/src/lib_init.c | 55 + lib/luajit/src/lib_io.c | 539 ++ lib/luajit/src/lib_jit.c | 663 +++ lib/luajit/src/lib_math.c | 233 + lib/luajit/src/lib_os.c | 287 + lib/luajit/src/lib_package.c | 602 +++ lib/luajit/src/lib_string.c | 940 lib/luajit/src/lib_table.c| 300 ++ lib/luajit/src/lj.supp| 26 + lib/luajit/src/lj_alloc.c | 1396 + lib/luajit/src/lj_alloc.h | 17 + lib/luajit/src/lj_api.c | 1200 + lib/luajit/src/lj_arch.h | 437 ++ lib/luajit/src/lj_asm.c | 1920 +++ lib/luajit/src/lj_asm.h | 17 + lib/luajit/src/lj_asm_arm.h | 2361 + lib/luajit/src/lj_asm_mips.h | 1977 +++ lib/luajit/src/lj_asm_ppc.h | 2169 lib/luajit/src/lj_asm_x86.h | 2806 ++ lib/luajit/src/lj_bc.c| 14 + lib/luajit/src/lj_bc.h| 261 + lib/luajit/src/lj_bcdump.h| 66 + lib/luajit/src/lj_bcread.c| 476
[22/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ccallback.c -- diff --git a/lib/luajit/src/lj_ccallback.c b/lib/luajit/src/lj_ccallback.c new file mode 100644 index 000..b210641 --- /dev/null +++ b/lib/luajit/src/lj_ccallback.c @@ -0,0 +1,644 @@ +/* +** FFI C callback handling. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#include lj_obj.h + +#if LJ_HASFFI + +#include lj_gc.h +#include lj_err.h +#include lj_tab.h +#include lj_state.h +#include lj_frame.h +#include lj_ctype.h +#include lj_cconv.h +#include lj_ccall.h +#include lj_ccallback.h +#include lj_target.h +#include lj_mcode.h +#include lj_trace.h +#include lj_vm.h + +/* -- Target-specific handling of callback slots -- */ + +#define CALLBACK_MCODE_SIZE(LJ_PAGESIZE * LJ_NUM_CBPAGE) + +#if LJ_OS_NOJIT + +/* Disabled callback support. */ +#define CALLBACK_SLOT2OFS(slot)(0*(slot)) +#define CALLBACK_OFS2SLOT(ofs) (0*(ofs)) +#define CALLBACK_MAX_SLOT 0 + +#elif LJ_TARGET_X86ORX64 + +#define CALLBACK_MCODE_HEAD(LJ_64 ? 8 : 0) +#define CALLBACK_MCODE_GROUP (-2+1+2+5+(LJ_64 ? 6 : 5)) + +#define CALLBACK_SLOT2OFS(slot) \ + (CALLBACK_MCODE_HEAD + CALLBACK_MCODE_GROUP*((slot)/32) + 4*(slot)) + +static MSize CALLBACK_OFS2SLOT(MSize ofs) +{ + MSize group; + ofs -= CALLBACK_MCODE_HEAD; + group = ofs / (32*4 + CALLBACK_MCODE_GROUP); + return (ofs % (32*4 + CALLBACK_MCODE_GROUP))/4 + group*32; +} + +#define CALLBACK_MAX_SLOT \ + (((CALLBACK_MCODE_SIZE-CALLBACK_MCODE_HEAD)/(CALLBACK_MCODE_GROUP+4*32))*32) + +#elif LJ_TARGET_ARM + +#define CALLBACK_MCODE_HEAD32 +#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot)) +#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) +#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) + +#elif LJ_TARGET_PPC + +#define CALLBACK_MCODE_HEAD24 +#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot)) +#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) +#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) + +#elif LJ_TARGET_MIPS + +#define CALLBACK_MCODE_HEAD24 +#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot)) +#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) +#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) + +#else + +/* Missing support for this architecture. */ +#define CALLBACK_SLOT2OFS(slot)(0*(slot)) +#define CALLBACK_OFS2SLOT(ofs) (0*(ofs)) +#define CALLBACK_MAX_SLOT 0 + +#endif + +/* Convert callback slot number to callback function pointer. */ +static void *callback_slot2ptr(CTState *cts, MSize slot) +{ + return (uint8_t *)cts-cb.mcode + CALLBACK_SLOT2OFS(slot); +} + +/* Convert callback function pointer to slot number. */ +MSize lj_ccallback_ptr2slot(CTState *cts, void *p) +{ + uintptr_t ofs = (uintptr_t)((uint8_t *)p -(uint8_t *)cts-cb.mcode); + if (ofs CALLBACK_MCODE_SIZE) { +MSize slot = CALLBACK_OFS2SLOT((MSize)ofs); +if (CALLBACK_SLOT2OFS(slot) == (MSize)ofs) + return slot; + } + return ~0u; /* Not a known callback function pointer. */ +} + +/* Initialize machine code for callback function pointers. */ +#if LJ_OS_NOJIT +/* Disabled callback support. */ +#define callback_mcode_init(g, p) UNUSED(p) +#elif LJ_TARGET_X86ORX64 +static void callback_mcode_init(global_State *g, uint8_t *page) +{ + uint8_t *p = page; + uint8_t *target = (uint8_t *)(void *)lj_vm_ffi_callback; + MSize slot; +#if LJ_64 + *(void **)p = target; p += 8; +#endif + for (slot = 0; slot CALLBACK_MAX_SLOT; slot++) { +/* mov al, slot; jmp group */ +*p++ = XI_MOVrib | RID_EAX; *p++ = (uint8_t)slot; +if ((slot 31) == 31 || slot == CALLBACK_MAX_SLOT-1) { + /* push ebp/rbp; mov ah, slot8; mov ebp, g. */ + *p++ = XI_PUSH + RID_EBP; + *p++ = XI_MOVrib | (RID_EAX+4); *p++ = (uint8_t)(slot 8); + *p++ = XI_MOVri | RID_EBP; + *(int32_t *)p = i32ptr(g); p += 4; +#if LJ_64 + /* jmp [rip-pageofs] where lj_vm_ffi_callback is stored. */ + *p++ = XI_GROUP5; *p++ = XM_OFS0 + (XOg_JMP3) + RID_EBP; + *(int32_t *)p = (int32_t)(page-(p+4)); p += 4; +#else + /* jmp lj_vm_ffi_callback. */ + *p++ = XI_JMP; *(int32_t *)p = target-(p+4); p += 4; +#endif +} else { + *p++ = XI_JMPs; *p++ = (uint8_t)((2+2)*(31-(slot31)) - 2); +} + } + lua_assert(p - page = CALLBACK_MCODE_SIZE); +} +#elif LJ_TARGET_ARM +static void callback_mcode_init(global_State *g, uint32_t *page) +{ + uint32_t *p = page; + void *target = (void *)lj_vm_ffi_callback; + MSize slot; + /* This must match with the saveregs macro in buildvm_arm.dasc. */ + *p++ = ARMI_SUB|ARMF_D(RID_R12)|ARMF_N(RID_R12)|ARMF_M(RID_PC); + *p++ =
[56/62] [abbrv] trafficserver git commit: Merge branch 'log-pqsp' of https://github.com/jwendell/trafficserver
Merge branch 'log-pqsp' of https://github.com/jwendell/trafficserver Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/aa59a0d5 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/aa59a0d5 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/aa59a0d5 Branch: refs/heads/6.0.x Commit: aa59a0d5274f54bff23b8af83a6fe020b39cf3df Parents: a90403e 44da264 Author: Brian Geffon bri...@apache.org Authored: Sun Jul 26 20:31:23 2015 -0700 Committer: Brian Geffon bri...@apache.org Committed: Sun Jul 26 20:31:23 2015 -0700 -- proxy/logging/Log.cc | 5 + proxy/logging/LogAccess.cc | 9 + proxy/logging/LogAccess.h | 1 + proxy/logging/LogAccessHttp.cc | 10 ++ proxy/logging/LogAccessHttp.h | 1 + 5 files changed, 26 insertions(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aa59a0d5/proxy/logging/Log.cc -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aa59a0d5/proxy/logging/LogAccess.cc -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aa59a0d5/proxy/logging/LogAccess.h -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aa59a0d5/proxy/logging/LogAccessHttp.cc -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/aa59a0d5/proxy/logging/LogAccessHttp.h --
[14/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_fold.c -- diff --git a/lib/luajit/src/lj_opt_fold.c b/lib/luajit/src/lj_opt_fold.c new file mode 100644 index 000..d00fdd5 --- /dev/null +++ b/lib/luajit/src/lj_opt_fold.c @@ -0,0 +1,2304 @@ +/* +** FOLD: Constant Folding, Algebraic Simplifications and Reassociation. +** ABCelim: Array Bounds Check Elimination. +** CSE: Common-Subexpression Elimination. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#define lj_opt_fold_c +#define LUA_CORE + +#include math.h + +#include lj_obj.h + +#if LJ_HASJIT + +#include lj_str.h +#include lj_tab.h +#include lj_ir.h +#include lj_jit.h +#include lj_iropt.h +#include lj_trace.h +#if LJ_HASFFI +#include lj_ctype.h +#endif +#include lj_carith.h +#include lj_vm.h +#include lj_strscan.h + +/* Here's a short description how the FOLD engine processes instructions: +** +** The FOLD engine receives a single instruction stored in fins (J-fold.ins). +** The instruction and its operands are used to select matching fold rules. +** These are applied iteratively until a fixed point is reached. +** +** The 8 bit opcode of the instruction itself plus the opcodes of the +** two instructions referenced by its operands form a 24 bit key +** 'ins left right' (unused operands - 0, literals - lowest 8 bits). +** +** This key is used for partial matching against the fold rules. The +** left/right operand fields of the key are successively masked with +** the 'any' wildcard, from most specific to least specific: +** +** ins left right +** ins any right +** ins left any +** ins any any +** +** The masked key is used to lookup a matching fold rule in a semi-perfect +** hash table. If a matching rule is found, the related fold function is run. +** Multiple rules can share the same fold function. A fold rule may return +** one of several special values: +** +** - NEXTFOLD means no folding was applied, because an additional test +** inside the fold function failed. Matching continues against less +** specific fold rules. Finally the instruction is passed on to CSE. +** +** - RETRYFOLD means the instruction was modified in-place. Folding is +** retried as if this instruction had just been received. +** +** All other return values are terminal actions -- no further folding is +** applied: +** +** - INTFOLD(i) returns a reference to the integer constant i. +** +** - LEFTFOLD and RIGHTFOLD return the left/right operand reference +** without emitting an instruction. +** +** - CSEFOLD and EMITFOLD pass the instruction directly to CSE or emit +** it without passing through any further optimizations. +** +** - FAILFOLD, DROPFOLD and CONDFOLD only apply to instructions which have +** no result (e.g. guarded assertions): FAILFOLD means the guard would +** always fail, i.e. the current trace is pointless. DROPFOLD means +** the guard is always true and has been eliminated. CONDFOLD is a +** shortcut for FAILFOLD + cond (i.e. drop if true, otherwise fail). +** +** - Any other return value is interpreted as an IRRef or TRef. This +** can be a reference to an existing or a newly created instruction. +** Only the least-significant 16 bits (IRRef1) are used to form a TRef +** which is finally returned to the caller. +** +** The FOLD engine receives instructions both from the trace recorder and +** substituted instructions from LOOP unrolling. This means all types +** of instructions may end up here, even though the recorder bypasses +** FOLD in some cases. Thus all loads, stores and allocations must have +** an any/any rule to avoid being passed on to CSE. +** +** Carefully read the following requirements before adding or modifying +** any fold rules: +** +** Requirement #1: All fold rules must preserve their destination type. +** +** Consistently use INTFOLD() (KINT result) or lj_ir_knum() (KNUM result). +** Never use lj_ir_knumint() which can have either a KINT or KNUM result. +** +** Requirement #2: Fold rules should not create *new* instructions which +** reference operands *across* PHIs. +** +** E.g. a RETRYFOLD with 'fins-op1 = fleft-op1' is invalid if the +** left operand is a PHI. Then fleft-op1 would point across the PHI +** frontier to an invariant instruction. Adding a PHI for this instruction +** would be counterproductive. The solution is to add a barrier which +** prevents folding across PHIs, i.e. 'PHIBARRIER(fleft)' in this case. +** The only exception is for recurrences with high latencies like +** repeated int-num-int conversions. +** +** One could relax this condition a bit if the referenced instruction is +** a PHI, too. But this often leads to worse code due to excessive +** register shuffling. +** +** Note: returning *existing* instructions (e.g. LEFTFOLD) is ok, though. +** Even returning fleft-op1 would be ok, because a new PHI will added, +** if needed. But again, this
[38/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dasm_mips.lua -- diff --git a/lib/luajit/dynasm/dasm_mips.lua b/lib/luajit/dynasm/dasm_mips.lua new file mode 100644 index 000..ae0dbd7 --- /dev/null +++ b/lib/luajit/dynasm/dasm_mips.lua @@ -0,0 +1,953 @@ +-- +-- DynASM MIPS module. +-- +-- Copyright (C) 2005-2015 Mike Pall. All rights reserved. +-- See dynasm.lua for full copyright notice. +-- + +-- Module information: +local _info = { + arch = mips, + description =DynASM MIPS module, + version =1.3.0, + vernum = 10300, + release =2012-01-23, + author = Mike Pall, + license =MIT, +} + +-- Exported glue functions for the arch-specific module. +local _M = { _info = _info } + +-- Cache library functions. +local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs +local assert, setmetatable = assert, setmetatable +local _s = string +local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char +local match, gmatch = _s.match, _s.gmatch +local concat, sort = table.concat, table.sort +local bit = bit or require(bit) +local band, shl, sar, tohex = bit.band, bit.lshift, bit.arshift, bit.tohex + +-- Inherited tables and callbacks. +local g_opt, g_arch +local wline, werror, wfatal, wwarn + +-- Action name list. +-- CHECK: Keep this in sync with the C code! +local action_names = { + STOP, SECTION, ESC, REL_EXT, + ALIGN, REL_LG, LABEL_LG, + REL_PC, LABEL_PC, IMM, +} + +-- Maximum number of section buffer positions for dasm_put(). +-- CHECK: Keep this in sync with the C code! +local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines. + +-- Action name - action number. +local map_action = {} +for n,name in ipairs(action_names) do + map_action[name] = n-1 +end + +-- Action list buffer. +local actlist = {} + +-- Argument list for next dasm_put(). Start with offset 0 into action list. +local actargs = { 0 } + +-- Current number of section buffer positions for dasm_put(). +local secpos = 1 + +-- + +-- Dump action names and numbers. +local function dumpactions(out) + out:write(DynASM encoding engine action codes:\n) + for n,name in ipairs(action_names) do +local num = map_action[name] +out:write(format( %-10s %02X %d\n, name, num, num)) + end + out:write(\n) +end + +-- Write action list buffer as a huge static C array. +local function writeactions(out, name) + local nn = #actlist + if nn == 0 then nn = 1; actlist[0] = map_action.STOP end + out:write(static const unsigned int , name, [, nn, ] = {\n) + for i = 1,nn-1 do +assert(out:write(0x, tohex(actlist[i]), ,\n)) + end + assert(out:write(0x, tohex(actlist[nn]), \n};\n\n)) +end + +-- + +-- Add word to action list. +local function wputxw(n) + assert(n = 0 and n = 0x and n % 1 == 0, word out of range) + actlist[#actlist+1] = n +end + +-- Add action to list with optional arg. Advance buffer pos, too. +local function waction(action, val, a, num) + local w = assert(map_action[action], bad action name `..action..') + wputxw(0xff00 + w * 0x1 + (val or 0)) + if a then actargs[#actargs+1] = a end + if a or num then secpos = secpos + (num or 1) end +end + +-- Flush action list (intervening C code or buffer pos overflow). +local function wflush(term) + if #actlist == actargs[1] then return end -- Nothing to flush. + if not term then waction(STOP) end -- Terminate action list. + wline(format(dasm_put(Dst, %s);, concat(actargs, , )), true) + actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put(). + secpos = 1 -- The actionlist offset occupies a buffer position, too. +end + +-- Put escaped word. +local function wputw(n) + if n = 0xff00 then waction(ESC) end + wputxw(n) +end + +-- Reserve position for word. +local function wpos() + local pos = #actlist+1 + actlist[pos] = + return pos +end + +-- Store word to reserved position. +local function wputpos(pos, n) + assert(n = 0 and n = 0x and n % 1 == 0, word out of range) + actlist[pos] = n +end + +-- + +-- Global label name - global label number. With auto assignment on 1st use. +local next_global = 20 +local map_global = setmetatable({}, { __index = function(t, name) + if not match(name, ^[%a_][%w_]*$) then werror(bad global label) end + local n = next_global + if n 2047 then werror(too many global labels) end + next_global = n + 1 + t[name] = n + return n +end}) + +-- Dump global labels. +local function dumpglobals(out, lvl) + local t = {} + for name, n in pairs(map_global) do t[n] =
[60/62] [abbrv] trafficserver git commit: [TS-3802]: fix double free of MIOBuffer in SSLNetVConnection during SPDY inactivity.
[TS-3802]: fix double free of MIOBuffer in SSLNetVConnection during SPDY inactivity. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/ec747924 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/ec747924 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/ec747924 Branch: refs/heads/6.0.x Commit: ec7479243bead60a123e64dbef8b9d53fdade095 Parents: 0e703e1 Author: Sudheer Vinukonda sudhe...@yahoo-inc.com Authored: Tue Jul 28 17:59:10 2015 + Committer: Sudheer Vinukonda sudhe...@yahoo-inc.com Committed: Tue Jul 28 17:59:10 2015 + -- proxy/spdy/SpdyClientSession.cc | 8 1 file changed, 8 insertions(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/ec747924/proxy/spdy/SpdyClientSession.cc -- diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc index d9db07f..60c8e20 100644 --- a/proxy/spdy/SpdyClientSession.cc +++ b/proxy/spdy/SpdyClientSession.cc @@ -482,6 +482,14 @@ spdy_process_fetch_body(TSEvent event, SpdyClientSession *sm, TSFetchSM fetch_sm void SpdyClientSession::do_io_close(int alertno) { + if (vc) { +// vc is released (null'ed) within ProxyClientSession when handling +// TS_HTTP_SSN_CLOSE_HOOK, so, reset ssl_iobuf to prevent double free +SSLNetVConnection *ssl_vc = dynamic_castSSLNetVConnection *(vc); +if (ssl_vc) { + ssl_vc-set_ssl_iobuf(NULL); +} + } // The object will be cleaned up from within ProxyClientSession::handle_api_return // This way, the object will still be alive for any SSN_CLOSE hooks do_api_callout(TS_HTTP_SSN_CLOSE_HOOK);
[48/62] [abbrv] trafficserver git commit: TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition
TS-3729 cache_promote: defer TSHttpTxnServerRespNoStoreSet() to a global continuation, saves a possible race condition Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3678a6e1 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3678a6e1 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3678a6e1 Branch: refs/heads/6.0.x Commit: 3678a6e11b53520c35d06c7d8baed79f43f812e2 Parents: 5ae63a1 Author: Leif Hedstrom zw...@apache.org Authored: Tue Jun 30 18:17:41 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Fri Jul 24 01:27:05 2015 -0600 -- .../experimental/cache_promote/cache_promote.cc | 25 +++- 1 file changed, 19 insertions(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3678a6e1/plugins/experimental/cache_promote/cache_promote.cc -- diff --git a/plugins/experimental/cache_promote/cache_promote.cc b/plugins/experimental/cache_promote/cache_promote.cc index 9c2edb6..dab961d 100644 --- a/plugins/experimental/cache_promote/cache_promote.cc +++ b/plugins/experimental/cache_promote/cache_promote.cc @@ -34,6 +34,8 @@ static const char *PLUGIN_NAME = cache_promote; +TSCont gNocacheCont; + // // Note that all options for all policies has to go here. Not particularly pretty... @@ -372,6 +374,20 @@ private: // +// Little helper continuation, to turn off writing to the cache. ToDo: when we have proper +// APIs to make requests / responses, we can remove this completely. +static int +cont_nocache_response(TSCont contp, TSEvent event, void *edata) +{ + TSHttpTxn txnp = static_castTSHttpTxn(edata); + + TSHttpTxnServerRespNoStoreSet(txnp, 1); + // Reenable and continue with the state machine. + TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); + return 0; +} + +// // Main plugin, a TXN hook in the TS_HTTP_READ_CACHE_HDR_HOOK. Unless the policy allows // caching, we will turn off the cache from here on for the TXN. // @@ -399,7 +415,7 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) TSDebug(PLUGIN_NAME, cache-status is %d, and leaving cache on (promoted), obj_status); } else { TSDebug(PLUGIN_NAME, cache-status is %d, and turning off the cache (not promoted), obj_status); -TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, contp); +TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, gNocacheCont); } break; default: @@ -413,11 +429,6 @@ cont_handle_policy(TSCont contp, TSEvent event, void *edata) } break; - // Temporaray hack, to deal with the fact that we can turn off the cache earlier - case TS_EVENT_HTTP_READ_RESPONSE_HDR: -TSHttpTxnServerRespNoStoreSet(txnp, 1); -break; - // Should not happen default: TSDebug(PLUGIN_NAME, Unhandled event %d, (int)event); @@ -447,6 +458,8 @@ TSRemapInit(TSRemapInterface *api_info, char *errbuf, int errbuf_size) return TS_ERROR; } + gNocacheCont = TSContCreate(cont_nocache_response, NULL); + TSDebug(PLUGIN_NAME, remap plugin is successfully initialized); return TS_SUCCESS; /* success */ }
[54/62] [abbrv] trafficserver git commit: Revert TS-3584: SPDY and H2 requests should not trigger connection keep-alive.
Revert TS-3584: SPDY and H2 requests should not trigger connection keep-alive. This reverts commit dda6814f07ee59c9e3e452a649e6e7f80906457d. Conflicts: CHANGES Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0b160a7f Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0b160a7f Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0b160a7f Branch: refs/heads/6.0.x Commit: 0b160a7f3e438101a0be3937ad3e92ff186b614e Parents: 5c60883 Author: shinrich shinr...@yahoo-inc.com Authored: Fri Jul 24 09:51:46 2015 -0500 Committer: shinrich shinr...@yahoo-inc.com Committed: Fri Jul 24 09:51:46 2015 -0500 -- proxy/http2/HTTP2.cc | 2 -- proxy/spdy/SpdyCallbacks.cc| 3 --- proxy/spdy/SpdyClientSession.h | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0b160a7f/proxy/http2/HTTP2.cc -- diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc index 6681308..f089081 100644 --- a/proxy/http2/HTTP2.cc +++ b/proxy/http2/HTTP2.cc @@ -544,8 +544,6 @@ convert_from_2_to_1_1_header(HTTPHdr *headers) headers-field_delete(MIME_FIELD_TRANSFER_ENCODING, MIME_LEN_TRANSFER_ENCODING); headers-field_delete(MIME_FIELD_UPGRADE, MIME_LEN_UPGRADE); - headers-value_set(MIME_FIELD_CONNECTION, MIME_LEN_CONNECTION, HTTP_VALUE_CLOSE, HTTP_LEN_CLOSE); - return PARSE_DONE; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0b160a7f/proxy/spdy/SpdyCallbacks.cc -- diff --git a/proxy/spdy/SpdyCallbacks.cc b/proxy/spdy/SpdyCallbacks.cc index 45213a3..69b40c8 100644 --- a/proxy/spdy/SpdyCallbacks.cc +++ b/proxy/spdy/SpdyCallbacks.cc @@ -297,8 +297,6 @@ spdy_process_syn_stream_frame(SpdyClientSession *sm, SpdyRequest *req) spdy_fetcher_launch(req); } -static char const *const no_keep_alive[] = {Connection, close, NULL}; - void spdy_on_ctrl_recv_callback(spdylay_session *session, spdylay_frame_type type, spdylay_frame *frame, void *user_data) { @@ -314,7 +312,6 @@ spdy_on_ctrl_recv_callback(spdylay_session *session, spdylay_frame_type type, sp req = spdyRequestAllocator.alloc(); req-init(sm, stream_id); req-append_nv(frame-syn_stream.nv); -req-append_nv(no_keep_alive); sm-req_map[stream_id] = req; sm-vc-add_to_active_queue(); spdy_process_syn_stream_frame(sm, req); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0b160a7f/proxy/spdy/SpdyClientSession.h -- diff --git a/proxy/spdy/SpdyClientSession.h b/proxy/spdy/SpdyClientSession.h index 498f6d8..12a5c79 100644 --- a/proxy/spdy/SpdyClientSession.h +++ b/proxy/spdy/SpdyClientSession.h @@ -56,7 +56,7 @@ public: void clear(); void - append_nv(const char *const *nv) + append_nv(char **nv) { for (int i = 0; nv[i]; i += 2) { headers.push_back(make_pair(nv[i], nv[i + 1]));
[61/62] [abbrv] trafficserver git commit: Fix the backout commit
Fix the backout commit Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/f86beac7 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/f86beac7 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/f86beac7 Branch: refs/heads/6.0.x Commit: f86beac70ffb81b84662497827b1b0f338ebb41e Parents: 13c76b3 Author: Leif Hedstrom zw...@apache.org Authored: Tue Jul 28 17:38:37 2015 -0600 Committer: Leif Hedstrom zw...@apache.org Committed: Tue Jul 28 17:38:37 2015 -0600 -- iocore/net/SSLUtils.cc | 11 +-- 1 file changed, 9 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f86beac7/iocore/net/SSLUtils.cc -- diff --git a/iocore/net/SSLUtils.cc b/iocore/net/SSLUtils.cc index 7ebce4b..e9f30a6 100644 --- a/iocore/net/SSLUtils.cc +++ b/iocore/net/SSLUtils.cc @@ -186,6 +186,14 @@ SSL_CTX_add_extra_chain_cert_file(SSL_CTX *ctx, const char *chainfile) return true; } +bool +ssl_session_timed_out(SSL_SESSION *session) +{ + return SSL_SESSION_get_timeout(session) (long)(time(NULL) - SSL_SESSION_get_time(session)); +} + +static void ssl_rm_cached_session(SSL_CTX *ctx, SSL_SESSION *sess); + static SSL_SESSION * ssl_get_cached_session(SSL *ssl, unsigned char *id, int len, int *copy) { @@ -220,8 +228,7 @@ ssl_get_cached_session(SSL *ssl, unsigned char *id, int len, int *copy) } else { SSL_INCREMENT_DYN_STAT(ssl_session_cache_miss); } - - return NULL; + return session; } static int
[35/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/buildvm.h -- diff --git a/lib/luajit/src/host/buildvm.h b/lib/luajit/src/host/buildvm.h new file mode 100644 index 000..b262185 --- /dev/null +++ b/lib/luajit/src/host/buildvm.h @@ -0,0 +1,104 @@ +/* +** LuaJIT VM builder. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _BUILDVM_H +#define _BUILDVM_H + +#include sys/types.h +#include stdio.h +#include stdlib.h +#include string.h +#include errno.h + +#include lj_def.h +#include lj_arch.h + +/* Hardcoded limits. Increase as needed. */ +#define BUILD_MAX_RELOC200 /* Max. number of relocations. */ +#define BUILD_MAX_FOLD 4096/* Max. number of fold rules. */ + +/* Prefix for scanned library definitions. */ +#define LIBDEF_PREFIX LJLIB_ + +/* Prefix for scanned fold definitions. */ +#define FOLDDEF_PREFIX LJFOLD + +/* Prefixes for generated labels. */ +#define LABEL_PREFIX lj_ +#define LABEL_PREFIX_BCLABEL_PREFIX BC_ +#define LABEL_PREFIX_FFLABEL_PREFIX ff_ +#define LABEL_PREFIX_CFLABEL_PREFIX cf_ +#define LABEL_PREFIX_FFH LABEL_PREFIX ffh_ +#define LABEL_PREFIX_LIBCF LABEL_PREFIX lib_cf_ +#define LABEL_PREFIX_LIBINIT LABEL_PREFIX lib_init_ + +/* Forward declaration. */ +struct dasm_State; + +/* Build modes. */ +#define BUILDDEF(_) \ + _(elfasm) _(coffasm) _(machasm) _(peobj) _(raw) \ + _(bcdef) _(ffdef) _(libdef) _(recdef) _(vmdef) \ + _(folddef) + +typedef enum { +#define BUILDENUM(name)BUILD_##name, +BUILDDEF(BUILDENUM) +#undef BUILDENUM + BUILD__MAX +} BuildMode; + +/* Code relocation. */ +typedef struct BuildReloc { + int32_t ofs; + int sym; + int type; +} BuildReloc; + +typedef struct BuildSym { + const char *name; + int32_t ofs; +} BuildSym; + +/* Build context structure. */ +typedef struct BuildCtx { + /* DynASM state pointer. Should be first member. */ + struct dasm_State *D; + /* Parsed command line. */ + BuildMode mode; + FILE *fp; + const char *outname; + char **args; + /* Code and symbols generated by DynASM. */ + uint8_t *code; + size_t codesz; + int npc, nglob, nsym, nreloc, nrelocsym; + void **glob; + BuildSym *sym; + const char **relocsym; + int32_t *bc_ofs; + const char *beginsym; + /* Strings generated by DynASM. */ + const char *const *globnames; + const char *dasm_ident; + const char *dasm_arch; + /* Relocations. */ + BuildReloc reloc[BUILD_MAX_RELOC]; +} BuildCtx; + +extern void owrite(BuildCtx *ctx, const void *ptr, size_t sz); +extern void emit_asm(BuildCtx *ctx); +extern void emit_peobj(BuildCtx *ctx); +extern void emit_lib(BuildCtx *ctx); +extern void emit_fold(BuildCtx *ctx); + +extern const char *const bc_names[]; +extern const char *const ir_names[]; +extern const char *const irt_names[]; +extern const char *const irfpm_names[]; +extern const char *const irfield_names[]; +extern const char *const ircall_names[]; + +#endif http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/buildvm_asm.c -- diff --git a/lib/luajit/src/host/buildvm_asm.c b/lib/luajit/src/host/buildvm_asm.c new file mode 100644 index 000..2c9a2d4 --- /dev/null +++ b/lib/luajit/src/host/buildvm_asm.c @@ -0,0 +1,313 @@ +/* +** LuaJIT VM builder: Assembler source code emitter. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#include buildvm.h +#include lj_bc.h + +/* */ + +#if LJ_TARGET_X86ORX64 +/* Emit bytes piecewise as assembler text. */ +static void emit_asm_bytes(BuildCtx *ctx, uint8_t *p, int n) +{ + int i; + for (i = 0; i n; i++) { +if ((i 15) == 0) + fprintf(ctx-fp, \t.byte %d, p[i]); +else + fprintf(ctx-fp, ,%d, p[i]); +if ((i 15) == 15) putc('\n', ctx-fp); + } + if ((n 15) != 0) putc('\n', ctx-fp); +} + +/* Emit relocation */ +static void emit_asm_reloc(BuildCtx *ctx, int type, const char *sym) +{ + switch (ctx-mode) { + case BUILD_elfasm: +if (type) + fprintf(ctx-fp, \t.long %s-.-4\n, sym); +else + fprintf(ctx-fp, \t.long %s\n, sym); +break; + case BUILD_coffasm: +fprintf(ctx-fp, \t.def %s; .scl 3; .type 32; .endef\n, sym); +if (type) + fprintf(ctx-fp, \t.long %s-.-4\n, sym); +else + fprintf(ctx-fp, \t.long %s\n, sym); +break; + default: /* BUILD_machasm for relative relocations handled below. */ +fprintf(ctx-fp, \t.long %s\n, sym); +break; + } +} + +static const char *const jccnames[] = { + jo, jno, jb, jnb, jz, jnz, jbe, ja, + js, jns, jpe, jpo, jl, jge, jle, jg +}; + +/* Emit relocation for the incredibly stupid OSX assembler. */ +static void emit_asm_reloc_mach(BuildCtx *ctx, uint8_t *cp, int n, +
[26/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_mips.h -- diff --git a/lib/luajit/src/lj_asm_mips.h b/lib/luajit/src/lj_asm_mips.h new file mode 100644 index 000..78bd26d --- /dev/null +++ b/lib/luajit/src/lj_asm_mips.h @@ -0,0 +1,1977 @@ +/* +** MIPS IR assembler (SSA IR - machine code). +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +/* -- Register allocator extensions --- */ + +/* Allocate a register with a hint. */ +static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) +{ + Reg r = IR(ref)-r; + if (ra_noreg(r)) { +if (!ra_hashint(r) !iscrossref(as, ref)) + ra_sethint(IR(ref)-r, hint); /* Propagate register hint. */ +r = ra_allocref(as, ref, allow); + } + ra_noweak(as, r); + return r; +} + +/* Allocate a register or RID_ZERO. */ +static Reg ra_alloc1z(ASMState *as, IRRef ref, RegSet allow) +{ + Reg r = IR(ref)-r; + if (ra_noreg(r)) { +if (!(allow RSET_FPR) irref_isk(ref) IR(ref)-i == 0) + return RID_ZERO; +r = ra_allocref(as, ref, allow); + } else { +ra_noweak(as, r); + } + return r; +} + +/* Allocate two source registers for three-operand instructions. */ +static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) +{ + IRIns *irl = IR(ir-op1), *irr = IR(ir-op2); + Reg left = irl-r, right = irr-r; + if (ra_hasreg(left)) { +ra_noweak(as, left); +if (ra_noreg(right)) + right = ra_alloc1z(as, ir-op2, rset_exclude(allow, left)); +else + ra_noweak(as, right); + } else if (ra_hasreg(right)) { +ra_noweak(as, right); +left = ra_alloc1z(as, ir-op1, rset_exclude(allow, right)); + } else if (ra_hashint(right)) { +right = ra_alloc1z(as, ir-op2, allow); +left = ra_alloc1z(as, ir-op1, rset_exclude(allow, right)); + } else { +left = ra_alloc1z(as, ir-op1, allow); +right = ra_alloc1z(as, ir-op2, rset_exclude(allow, left)); + } + return left | (right 8); +} + +/* -- Guard handling -- */ + +/* Need some spare long-range jump slots, for out-of-range branches. */ +#define MIPS_SPAREJUMP 4 + +/* Setup spare long-range jump slots per mcarea. */ +static void asm_sparejump_setup(ASMState *as) +{ + MCode *mxp = as-mcbot; + /* Assumes sizeof(MCLink) == 8. */ + if (((uintptr_t)mxp (LJ_PAGESIZE-1)) == 8) { +lua_assert(MIPSI_NOP == 0); +memset(mxp+2, 0, MIPS_SPAREJUMP*8); +mxp += MIPS_SPAREJUMP*2; +lua_assert(mxp as-mctop); +lj_mcode_sync(as-mcbot, mxp); +lj_mcode_commitbot(as-J, mxp); +as-mcbot = mxp; +as-mclim = as-mcbot + MCLIM_REDZONE; + } +} + +/* Setup exit stub after the end of each trace. */ +static void asm_exitstub_setup(ASMState *as) +{ + MCode *mxp = as-mctop; + /* sw TMP, 0(sp); j -vm_exit_handler; li TMP, traceno */ + *--mxp = MIPSI_LI|MIPSF_T(RID_TMP)|as-T-traceno; + *--mxp = MIPSI_J|uintptr_t)(void *)lj_vm_exit_handler)2)0x03ffu); + lua_assert(((uintptr_t)mxp ^ (uintptr_t)(void *)lj_vm_exit_handler)28 == 0); + *--mxp = MIPSI_SW|MIPSF_T(RID_TMP)|MIPSF_S(RID_SP)|0; + as-mctop = mxp; +} + +/* Keep this in-sync with exitstub_trace_addr(). */ +#define asm_exitstub_addr(as) ((as)-mctop) + +/* Emit conditional branch to exit for guard. */ +static void asm_guard(ASMState *as, MIPSIns mi, Reg rs, Reg rt) +{ + MCode *target = asm_exitstub_addr(as); + MCode *p = as-mcp; + if (LJ_UNLIKELY(p == as-invmcp)) { +as-invmcp = NULL; +as-loopinv = 1; +as-mcp = p+1; +mi = mi ^ ((mi28) == 1 ? 0x0400u : 0x0001u); /* Invert cond. */ +target = p; /* Patch target later in asm_loop_fixup. */ + } + emit_ti(as, MIPSI_LI, RID_TMP, as-snapno); + emit_branch(as, mi, rs, rt, target); +} + +/* -- Operand fusion -- */ + +/* Limit linear search to this distance. Avoids O(n^2) behavior. */ +#define CONFLICT_SEARCH_LIM31 + +/* Check if there's no conflicting instruction between curins and ref. */ +static int noconflict(ASMState *as, IRRef ref, IROp conflict) +{ + IRIns *ir = as-ir; + IRRef i = as-curins; + if (i ref + CONFLICT_SEARCH_LIM) +return 0; /* Give up, ref is too far away. */ + while (--i ref) +if (ir[i].o == conflict) + return 0; /* Conflict found. */ + return 1; /* Ok, no conflict. */ +} + +/* Fuse the array base of colocated arrays. */ +static int32_t asm_fuseabase(ASMState *as, IRRef ref) +{ + IRIns *ir = IR(ref); + if (ir-o == IR_TNEW ir-op1 = LJ_MAX_COLOSIZE + !neverfuse(as) noconflict(as, ref, IR_NEWREF)) +return (int32_t)sizeof(GCtab); + return 0; +} + +/* Fuse array/hash/upvalue reference into register+offset operand. */ +static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow) +{ + IRIns *ir = IR(ref); + if (ra_noreg(ir-r)) { +if (ir-o == IR_AREF) { + if
[45/62] [abbrv] trafficserver git commit: TS-3774: Fix memory leak issue in host file parsing for HostDB.
TS-3774: Fix memory leak issue in host file parsing for HostDB. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/c36204d5 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/c36204d5 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/c36204d5 Branch: refs/heads/6.0.x Commit: c36204d5abaf3d4c335dd885ace1e5d58b57d451 Parents: 3838cf2 Author: Alan M. Carroll a...@apache.org Authored: Tue Jul 21 11:10:05 2015 -0500 Committer: Alan M. Carroll a...@apache.org Committed: Thu Jul 23 15:43:50 2015 -0500 -- iocore/hostdb/HostDB.cc | 39 +++--- iocore/hostdb/I_HostDBProcessor.h | 7 +- iocore/hostdb/P_HostDBProcessor.h | 4 +++- 3 files changed, 31 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/c36204d5/iocore/hostdb/HostDB.cc -- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index bb438a1..0df0cd8 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -662,19 +662,13 @@ HostDBInfo * probe(ProxyMutex *mutex, HostDBMD5 const md5, bool ignore_timeout) { // If we have an entry in our hosts file, we don't need to bother with DNS + // Make a local copy/reference so we don't have to worry about updates. PtrRefCountedHostsFileMap current_host_file_map = hostDB.hosts_file_ptr; ts::ConstBuffer hname(md5.host_name, md5.host_len); HostsFileMap::iterator find_result = current_host_file_map-hosts_file_map.find(hname); if (find_result != current_host_file_map-hosts_file_map.end()) { -// TODO: Something to make this not local :/ -static HostDBInfo r; -r.round_robin = false; -r.round_robin_elt = false; -r.reverse_dns = false; -r.is_srv = false; -ats_ip_set(r.ip(), (*find_result).second); -return r; +return (find_result-second); } ink_assert(this_ethread() == hostDB.lock_for_bucket((int)(fold_md5(md5.hash) % hostDB.buckets))-thread_holding); @@ -2731,8 +2725,6 @@ HostDBFileContinuation::destroy() // proceeding at a time in any case so we might as well make these // globals. int HostDBFileUpdateActive = 0; -// map of hostname - IpAddr -PtrRefCountedHostsFileMap parsed_hosts_file_ptr(new RefCountedHostsFileMap()); // Actual ordering doesn't matter as long as it's consistent. bool @@ -2743,7 +2735,7 @@ CmpMD5(INK_MD5 const lhs, INK_MD5 const rhs) void -ParseHostLine(char *l) +ParseHostLine(RefCountedHostsFileMap *map, char *l) { Tokenizer elts( \t); int n_elts = elts.Initialize(l, SHARE_TOKS); @@ -2754,8 +2746,13 @@ ParseHostLine(char *l) for (int i = 1; i n_elts; ++i) { ts::ConstBuffer name(elts[i], strlen(elts[i])); // If we don't have an entry already (host files only support single IPs for a given name) - if (parsed_hosts_file_ptr-hosts_file_map.find(name) == parsed_hosts_file_ptr-hosts_file_map.end()) { -parsed_hosts_file_ptr-hosts_file_map[name] = ip; + if (map-hosts_file_map.find(name) == map-hosts_file_map.end()) { + HostsFileMap::mapped_type item = map-hosts_file_map[name]; + item.round_robin = false; + item.round_robin_elt = false; +item.reverse_dns = false; +item.is_srv = false; +ats_ip_set(item.ip(), ip); } } } @@ -2765,6 +2762,8 @@ ParseHostLine(char *l) void ParseHostFile(char const *path) { + PtrRefCountedHostsFileMap parsed_hosts_file_ptr; + // Test and set for update in progress. if (0 != ink_atomic_swap(HostDBFileUpdateActive, 1)) { Debug(hostdb, Skipped load of host file because update already in progress); @@ -2780,6 +2779,7 @@ ParseHostFile(char const *path) // +1 in case no terminating newline int64_t size = info.st_size + 1; +parsed_hosts_file_ptr = new RefCountedHostsFileMap; parsed_hosts_file_ptr-HostFileText = static_castchar *(ats_malloc(size)); if (parsed_hosts_file_ptr-HostFileText) { char *base = parsed_hosts_file_ptr-HostFileText; @@ -2805,7 +2805,7 @@ ParseHostFile(char const *path) while (base spot isspace(*base)) ++base;// skip leading ws if (*base != '#' base spot) // non-empty non-comment line - ParseHostLine(base); + ParseHostLine(parsed_hosts_file_ptr, base); base = spot + 1; } @@ -2815,10 +2815,15 @@ ParseHostFile(char const *path) } } - // Swap out hostDB's map for ours + // Rotate the host file maps down. We depend on two assumptions here - + // 1) Host files are not updated frequently. Even if updated via traffic_ctl that will be at least 5-10 seconds between reloads. + // 2)
[53/62] [abbrv] trafficserver git commit: Revert TS-3640: Drupal auth fails over SPDY
Revert TS-3640: Drupal auth fails over SPDY This reverts commit c8bcd7006ffe66e4dd2d8f072da771cd947e4643. Conflicts: proxy/http/HttpSM.cc Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5c60883e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5c60883e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5c60883e Branch: refs/heads/6.0.x Commit: 5c60883e8919383e61b0199a6289ddc40a3ddc5a Parents: f40bd7c Author: shinrich shinr...@yahoo-inc.com Authored: Fri Jul 24 09:50:52 2015 -0500 Committer: shinrich shinr...@yahoo-inc.com Committed: Fri Jul 24 09:50:52 2015 -0500 -- proxy/http/HttpSM.cc | 16 +--- 1 file changed, 13 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5c60883e/proxy/http/HttpSM.cc -- diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc index 4ac8d4a..c9b1322 100644 --- a/proxy/http/HttpSM.cc +++ b/proxy/http/HttpSM.cc @@ -3173,9 +3173,19 @@ HttpSM::tunnel_handler_ua(int event, HttpTunnelConsumer *c) ink_assert(ua_entry-vc == c-vc); if (close_connection) { -// If the client could be pipelining, we need to set the ua_session into half close mode - -if (t_state.client_info.pipeline_possible == true c-producer-vc_type != HT_STATIC event == VC_EVENT_WRITE_COMPLETE) { +// If the client could be pipelining or is doing a POST, we need to +// set the ua_session into half close mode + +// only external POSTs should be subject to this logic; ruling out internal POSTs here +bool is_eligible_post_request = (t_state.method == HTTP_WKSIDX_POST); +if (is_eligible_post_request) { + NetVConnection *vc = ua_session-get_netvc(); + if (vc) { +is_eligible_post_request = vc-get_is_internal_request() ? false : true; + } +} +if ((is_eligible_post_request || t_state.client_info.pipeline_possible == true) c-producer-vc_type != HT_STATIC +event == VC_EVENT_WRITE_COMPLETE) { ua_session-set_half_close_flag(); }
[29/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_alloc.c -- diff --git a/lib/luajit/src/lj_alloc.c b/lib/luajit/src/lj_alloc.c new file mode 100644 index 000..7c7ec67 --- /dev/null +++ b/lib/luajit/src/lj_alloc.c @@ -0,0 +1,1396 @@ +/* +** Bundled memory allocator. +** +** Beware: this is a HEAVILY CUSTOMIZED version of dlmalloc. +** The original bears the following remark: +** +** This is a version (aka dlmalloc) of malloc/free/realloc written by +** Doug Lea and released to the public domain, as explained at +** http://creativecommons.org/licenses/publicdomain. +** +** * Version pre-2.8.4 Wed Mar 29 19:46:29 2006(dl at gee) +** +** No additional copyright is claimed over the customizations. +** Please do NOT bother the original author about this version here! +** +** If you want to use dlmalloc in another project, you should get +** the original from: ftp://gee.cs.oswego.edu/pub/misc/ +** For thread-safe derivatives, take a look at: +** - ptmalloc: http://www.malloc.de/ +** - nedmalloc: http://www.nedprod.com/programs/portable/nedmalloc/ +*/ + +#define lj_alloc_c +#define LUA_CORE + +/* To get the mremap prototype. Must be defined before any system includes. */ +#if defined(__linux__) !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + +#include lj_def.h +#include lj_arch.h +#include lj_alloc.h + +#ifndef LUAJIT_USE_SYSMALLOC + +#define MAX_SIZE_T (~(size_t)0) +#define MALLOC_ALIGNMENT ((size_t)8U) + +#define DEFAULT_GRANULARITY((size_t)128U * (size_t)1024U) +#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) +#define DEFAULT_MMAP_THRESHOLD ((size_t)128U * (size_t)1024U) +#define MAX_RELEASE_CHECK_RATE 255 + +/* --- size_t and alignment properties */ + +/* The byte and bit size of a size_t */ +#define SIZE_T_SIZE(sizeof(size_t)) +#define SIZE_T_BITSIZE (sizeof(size_t) 3) + +/* Some constants coerced to size_t */ +/* Annoying but necessary to avoid errors on some platforms */ +#define SIZE_T_ZERO((size_t)0) +#define SIZE_T_ONE ((size_t)1) +#define SIZE_T_TWO ((size_t)2) +#define TWO_SIZE_T_SIZES (SIZE_T_SIZE1) +#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE2) +#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) + +/* The bit mask value corresponding to MALLOC_ALIGNMENT */ +#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) + +/* the number of bytes to offset an address to align it */ +#define align_offset(A)\ + size_t)(A) CHUNK_ALIGN_MASK) == 0)? 0 :\ + ((MALLOC_ALIGNMENT - ((size_t)(A) CHUNK_ALIGN_MASK)) CHUNK_ALIGN_MASK)) + +/* -- MMAP support --- */ + +#define MFAIL ((void *)(MAX_SIZE_T)) +#define CMFAIL ((char *)(MFAIL)) /* defined for convenience */ + +#define IS_DIRECT_BIT (SIZE_T_ONE) + +#if LJ_TARGET_WINDOWS + +#define WIN32_LEAN_AND_MEAN +#include windows.h + +#if LJ_64 + +/* Undocumented, but hey, that's what we all love so much about Windows. */ +typedef long (*PNTAVM)(HANDLE handle, void **addr, ULONG zbits, + size_t *size, ULONG alloctype, ULONG prot); +static PNTAVM ntavm; + +/* Number of top bits of the lower 32 bits of an address that must be zero. +** Apparently 0 gives us full 64 bit addresses and 1 gives us the lower 2GB. +*/ +#define NTAVM_ZEROBITS 1 + +static void INIT_MMAP(void) +{ + ntavm = (PNTAVM)GetProcAddress(GetModuleHandleA(ntdll.dll), +NtAllocateVirtualMemory); +} + +/* Win64 32 bit MMAP via NtAllocateVirtualMemory. */ +static LJ_AINLINE void *CALL_MMAP(size_t size) +{ + DWORD olderr = GetLastError(); + void *ptr = NULL; + long st = ntavm(INVALID_HANDLE_VALUE, ptr, NTAVM_ZEROBITS, size, + MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); + SetLastError(olderr); + return st == 0 ? ptr : MFAIL; +} + +/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ +static LJ_AINLINE void *DIRECT_MMAP(size_t size) +{ + DWORD olderr = GetLastError(); + void *ptr = NULL; + long st = ntavm(INVALID_HANDLE_VALUE, ptr, NTAVM_ZEROBITS, size, + MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE); + SetLastError(olderr); + return st == 0 ? ptr : MFAIL; +} + +#else + +#define INIT_MMAP()((void)0) + +/* Win32 MMAP via VirtualAlloc */ +static LJ_AINLINE void *CALL_MMAP(size_t size) +{ + DWORD olderr = GetLastError(); + void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); + SetLastError(olderr); + return ptr ? ptr : MFAIL; +} + +/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ +static LJ_AINLINE void *DIRECT_MMAP(size_t size) +{ + DWORD olderr = GetLastError(); + void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, +
[08/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_tab.c -- diff --git a/lib/luajit/src/lj_tab.c b/lib/luajit/src/lj_tab.c new file mode 100644 index 000..a8062db --- /dev/null +++ b/lib/luajit/src/lj_tab.c @@ -0,0 +1,631 @@ +/* +** Table handling. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +** +** Major portions taken verbatim or adapted from the Lua interpreter. +** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h +*/ + +#define lj_tab_c +#define LUA_CORE + +#include lj_obj.h +#include lj_gc.h +#include lj_err.h +#include lj_tab.h + +/* -- Object hashing -- */ + +/* Hash values are masked with the table hash mask and used as an index. */ +static LJ_AINLINE Node *hashmask(const GCtab *t, uint32_t hash) +{ + Node *n = noderef(t-node); + return n[hash t-hmask]; +} + +/* String hashes are precomputed when they are interned. */ +#define hashstr(t, s) hashmask(t, (s)-hash) + +#define hashlohi(t, lo, hi)hashmask((t), hashrot((lo), (hi))) +#define hashnum(t, o) hashlohi((t), (o)-u32.lo, ((o)-u32.hi 1)) +#define hashptr(t, p) hashlohi((t), u32ptr(p), u32ptr(p) + HASH_BIAS) +#define hashgcref(t, r)hashlohi((t), gcrefu(r), gcrefu(r) + HASH_BIAS) + +/* Hash an arbitrary key and return its anchor position in the hash table. */ +static Node *hashkey(const GCtab *t, cTValue *key) +{ + lua_assert(!tvisint(key)); + if (tvisstr(key)) +return hashstr(t, strV(key)); + else if (tvisnum(key)) +return hashnum(t, key); + else if (tvisbool(key)) +return hashmask(t, boolV(key)); + else +return hashgcref(t, key-gcr); + /* Only hash 32 bits of lightuserdata on a 64 bit CPU. Good enough? */ +} + +/* -- Table creation and destruction -- */ + +/* Create new hash part for table. */ +static LJ_AINLINE void newhpart(lua_State *L, GCtab *t, uint32_t hbits) +{ + uint32_t hsize; + Node *node; + lua_assert(hbits != 0); + if (hbits LJ_MAX_HBITS) +lj_err_msg(L, LJ_ERR_TABOV); + hsize = 1u hbits; + node = lj_mem_newvec(L, hsize, Node); + setmref(node-freetop, node[hsize]); + setmref(t-node, node); + t-hmask = hsize-1; +} + +/* +** Q: Why all of these copies of t-hmask, t-node etc. to local variables? +** A: Because alias analysis for C is _really_ tough. +**Even state-of-the-art C compilers won't produce good code without this. +*/ + +/* Clear hash part of table. */ +static LJ_AINLINE void clearhpart(GCtab *t) +{ + uint32_t i, hmask = t-hmask; + Node *node = noderef(t-node); + lua_assert(t-hmask != 0); + for (i = 0; i = hmask; i++) { +Node *n = node[i]; +setmref(n-next, NULL); +setnilV(n-key); +setnilV(n-val); + } +} + +/* Clear array part of table. */ +static LJ_AINLINE void clearapart(GCtab *t) +{ + uint32_t i, asize = t-asize; + TValue *array = tvref(t-array); + for (i = 0; i asize; i++) +setnilV(array[i]); +} + +/* Create a new table. Note: the slots are not initialized (yet). */ +static GCtab *newtab(lua_State *L, uint32_t asize, uint32_t hbits) +{ + GCtab *t; + /* First try to colocate the array part. */ + if (LJ_MAX_COLOSIZE != 0 asize 0 asize = LJ_MAX_COLOSIZE) { +lua_assert((sizeof(GCtab) 7) == 0); +t = (GCtab *)lj_mem_newgco(L, sizetabcolo(asize)); +t-gct = ~LJ_TTAB; +t-nomm = (uint8_t)~0; +t-colo = (int8_t)asize; +setmref(t-array, (TValue *)((char *)t + sizeof(GCtab))); +setgcrefnull(t-metatable); +t-asize = asize; +t-hmask = 0; +setmref(t-node, G(L)-nilnode); + } else { /* Otherwise separately allocate the array part. */ +t = lj_mem_newobj(L, GCtab); +t-gct = ~LJ_TTAB; +t-nomm = (uint8_t)~0; +t-colo = 0; +setmref(t-array, NULL); +setgcrefnull(t-metatable); +t-asize = 0; /* In case the array allocation fails. */ +t-hmask = 0; +setmref(t-node, G(L)-nilnode); +if (asize 0) { + if (asize LJ_MAX_ASIZE) + lj_err_msg(L, LJ_ERR_TABOV); + setmref(t-array, lj_mem_newvec(L, asize, TValue)); + t-asize = asize; +} + } + if (hbits) +newhpart(L, t, hbits); + return t; +} + +/* Create a new table. +** +** IMPORTANT NOTE: The API differs from lua_createtable()! +** +** The array size is non-inclusive. E.g. asize=128 creates array slots +** for 0..127, but not for 128. If you need slots 1..128, pass asize=129 +** (slot 0 is wasted in this case). +** +** The hash size is given in hash bits. hbits=0 means no hash part. +** hbits=1 creates 2 hash slots, hbits=2 creates 4 hash slots and so on. +*/ +GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits) +{ + GCtab *t = newtab(L, asize, hbits); + clearapart(t); + if (t-hmask 0) clearhpart(t); + return t; +} + +#if LJ_HASJIT +GCtab * LJ_FASTCALL lj_tab_new1(lua_State *L, uint32_t ahsize) +{ + GCtab *t =
[17/62] [abbrv] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_frame.h -- diff --git a/lib/luajit/src/lj_frame.h b/lib/luajit/src/lj_frame.h new file mode 100644 index 000..cd57be2 --- /dev/null +++ b/lib/luajit/src/lj_frame.h @@ -0,0 +1,183 @@ +/* +** Stack frames. +** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h +*/ + +#ifndef _LJ_FRAME_H +#define _LJ_FRAME_H + +#include lj_obj.h +#include lj_bc.h + +/* -- Lua stack frame - */ + +/* Frame type markers in callee function slot (callee base-1). */ +enum { + FRAME_LUA, FRAME_C, FRAME_CONT, FRAME_VARG, + FRAME_LUAP, FRAME_CP, FRAME_PCALL, FRAME_PCALLH +}; +#define FRAME_TYPE 3 +#define FRAME_P4 +#define FRAME_TYPEP(FRAME_TYPE|FRAME_P) + +/* Macros to access and modify Lua frames. */ +#define frame_gc(f)(gcref((f)-fr.func)) +#define frame_func(f) (frame_gc(f)-fn) +#define frame_ftsz(f) ((f)-fr.tp.ftsz) + +#define frame_type(f) (frame_ftsz(f) FRAME_TYPE) +#define frame_typep(f) (frame_ftsz(f) FRAME_TYPEP) +#define frame_islua(f) (frame_type(f) == FRAME_LUA) +#define frame_isc(f) (frame_type(f) == FRAME_C) +#define frame_iscont(f)(frame_typep(f) == FRAME_CONT) +#define frame_isvarg(f)(frame_typep(f) == FRAME_VARG) +#define frame_ispcall(f) ((frame_ftsz(f) 6) == FRAME_PCALL) + +#define frame_pc(f)(mref((f)-fr.tp.pcr, const BCIns)) +#define frame_contpc(f)(frame_pc((f)-1)) +#if LJ_64 +#define frame_contf(f) \ + ((ASMFunction)(void *)((intptr_t)lj_vm_asm_begin + \ +(intptr_t)(int32_t)((f)-1)-u32.lo)) +#else +#define frame_contf(f) ((ASMFunction)gcrefp(((f)-1)-gcr, void)) +#endif +#define frame_delta(f) (frame_ftsz(f) 3) +#define frame_sized(f) (frame_ftsz(f) ~FRAME_TYPEP) + +#define frame_prevl(f) ((f) - (1+bc_a(frame_pc(f)[-1]))) +#define frame_prevd(f) ((TValue *)((char *)(f) - frame_sized(f))) +#define frame_prev(f) (frame_islua(f)?frame_prevl(f):frame_prevd(f)) +/* Note: this macro does not skip over FRAME_VARG. */ + +#define setframe_pc(f, pc) (setmref((f)-fr.tp.pcr, (pc))) +#define setframe_ftsz(f, sz) ((f)-fr.tp.ftsz = (sz)) +#define setframe_gc(f, p) (setgcref((f)-fr.func, (p))) + +/* -- C stack frame --- */ + +/* Macros to access and modify the C stack frame chain. */ + +/* These definitions must match with the arch-specific *.dasc files. */ +#if LJ_TARGET_X86 +#define CFRAME_OFS_ERRF(15*4) +#define CFRAME_OFS_NRES(14*4) +#define CFRAME_OFS_PREV(13*4) +#define CFRAME_OFS_L (12*4) +#define CFRAME_OFS_PC (6*4) +#define CFRAME_OFS_MULTRES (5*4) +#define CFRAME_SIZE(12*4) +#define CFRAME_SHIFT_MULTRES 0 +#elif LJ_TARGET_X64 +#if LJ_ABI_WIN +#define CFRAME_OFS_PREV(13*8) +#define CFRAME_OFS_PC (25*4) +#define CFRAME_OFS_L (24*4) +#define CFRAME_OFS_ERRF(23*4) +#define CFRAME_OFS_NRES(22*4) +#define CFRAME_OFS_MULTRES (21*4) +#define CFRAME_SIZE(10*8) +#define CFRAME_SIZE_JIT(CFRAME_SIZE + 9*16 + 4*8) +#define CFRAME_SHIFT_MULTRES 0 +#else +#define CFRAME_OFS_PREV(4*8) +#define CFRAME_OFS_PC (7*4) +#define CFRAME_OFS_L (6*4) +#define CFRAME_OFS_ERRF(5*4) +#define CFRAME_OFS_NRES(4*4) +#define CFRAME_OFS_MULTRES (1*4) +#define CFRAME_SIZE(10*8) +#define CFRAME_SIZE_JIT(CFRAME_SIZE + 16) +#define CFRAME_SHIFT_MULTRES 0 +#endif +#elif LJ_TARGET_ARM +#define CFRAME_OFS_ERRF24 +#define CFRAME_OFS_NRES20 +#define CFRAME_OFS_PREV16 +#define CFRAME_OFS_L 12 +#define CFRAME_OFS_PC 8 +#define CFRAME_OFS_MULTRES 4 +#if LJ_ARCH_HASFPU +#define CFRAME_SIZE128 +#else +#define CFRAME_SIZE64 +#endif +#define CFRAME_SHIFT_MULTRES 3 +#elif LJ_TARGET_PPC +#if LJ_TARGET_XBOX360 +#define CFRAME_OFS_ERRF424 +#define CFRAME_OFS_NRES420 +#define CFRAME_OFS_PREV400 +#define CFRAME_OFS_L 416 +#define CFRAME_OFS_PC 412 +#define CFRAME_OFS_MULTRES 408 +#define CFRAME_SIZE384 +#define CFRAME_SHIFT_MULTRES 3 +#elif LJ_ARCH_PPC64 +#define CFRAME_OFS_ERRF472 +#define CFRAME_OFS_NRES468 +#define CFRAME_OFS_PREV448 +#define CFRAME_OFS_L 464 +#define CFRAME_OFS_PC 460 +#define CFRAME_OFS_MULTRES 456 +#define CFRAME_SIZE400 +#define CFRAME_SHIFT_MULTRES 3 +#else +#define
[43/62] [abbrv] trafficserver git commit: TS-3793: Check the incoming header request length for HTTP/2 requests
TS-3793: Check the incoming header request length for HTTP/2 requests Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1cb87d28 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1cb87d28 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1cb87d28 Branch: refs/heads/6.0.x Commit: 1cb87d281fef19c4e4e0a97c071fb0bcdad84365 Parents: 1f27b84 Author: Bryan Call bc...@apache.org Authored: Thu Jul 23 19:42:25 2015 +0200 Committer: Bryan Call bc...@apache.org Committed: Thu Jul 23 19:45:53 2015 +0200 -- proxy/http2/HTTP2.cc| 2 ++ proxy/http2/HTTP2.h | 1 + proxy/http2/Http2ConnectionState.cc | 14 ++ proxy/http2/Http2ConnectionState.h | 3 +++ 4 files changed, 20 insertions(+) -- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/HTTP2.cc -- diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc index e7db7cb..6681308 100644 --- a/proxy/http2/HTTP2.cc +++ b/proxy/http2/HTTP2.cc @@ -762,6 +762,7 @@ uint32_t Http2::initial_window_size = 1048576; uint32_t Http2::max_frame_size = 16384; uint32_t Http2::header_table_size = 4096; uint32_t Http2::max_header_list_size = 4294967295; +uint32_t Http2::max_request_header_size = 131072; void Http2::init() @@ -771,6 +772,7 @@ Http2::init() REC_EstablishStaticConfigInt32U(max_frame_size, proxy.config.http2.max_frame_size); REC_EstablishStaticConfigInt32U(header_table_size, proxy.config.http2.header_table_size); REC_EstablishStaticConfigInt32U(max_header_list_size, proxy.config.http2.max_header_list_size); + REC_EstablishStaticConfigInt32U(max_request_header_size, proxy.config.http.request_header_max_size); // Setup statistics http2_rsb = RecAllocateRawStatBlock(static_castint(HTTP2_N_STATS)); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/HTTP2.h -- diff --git a/proxy/http2/HTTP2.h b/proxy/http2/HTTP2.h index bdaf6f2..a577a15 100644 --- a/proxy/http2/HTTP2.h +++ b/proxy/http2/HTTP2.h @@ -314,6 +314,7 @@ public: static uint32_t max_frame_size; static uint32_t header_table_size; static uint32_t max_header_list_size; + static uint32_t max_request_header_size; static void init(); }; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/Http2ConnectionState.cc -- diff --git a/proxy/http2/Http2ConnectionState.cc b/proxy/http2/Http2ConnectionState.cc index c45ee32..eb24735 100644 --- a/proxy/http2/Http2ConnectionState.cc +++ b/proxy/http2/Http2ConnectionState.cc @@ -169,6 +169,13 @@ rcv_headers_frame(Http2ClientSession cs, Http2ConnectionState cstate, const Ht return HTTP2_ERROR_PROTOCOL_ERROR; } + // keep track of how many bytes we get in the frame + stream-request_header_length += payload_length; + if (stream-request_header_length Http2::max_request_header_size) { +Error(HTTP/2 payload for headers exceeded: %u, stream-request_header_length); +return HTTP2_ERROR_PROTOCOL_ERROR; + } + // A receiver MUST treat the receipt of any other type of frame or // a frame on a different stream as a connection error of type PROTOCOL_ERROR. if (cstate.get_continued_id() != 0) { @@ -540,6 +547,13 @@ rcv_continuation_frame(Http2ClientSession cs, Http2ConnectionState cstate, con unsigned read_bytes = read_rcv_buffer(buf + remaining_bytes, sizeof(buf) - remaining_bytes, nbytes, frame); IOVec header_block_fragment = make_iovec(buf, read_bytes + remaining_bytes); +// keep track of how many bytes we get in the frame +stream-request_header_length += frame.header().length; +if (stream-request_header_length Http2::max_request_header_size) { + Error(HTTP/2 payload for headers exceeded: %u, stream-request_header_length); + return HTTP2_ERROR_PROTOCOL_ERROR; +} + bool cont = nbytes frame.header().length || !(frame.header().flags HTTP2_FLAGS_HEADERS_END_HEADERS); int64_t decoded_bytes = stream-decode_request_header(header_block_fragment, *cstate.local_dynamic_table, cont); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/Http2ConnectionState.h -- diff --git a/proxy/http2/Http2ConnectionState.h b/proxy/http2/Http2ConnectionState.h index 9c05ab4..42f05f4 100644 --- a/proxy/http2/Http2ConnectionState.h +++ b/proxy/http2/Http2ConnectionState.h @@ -106,6 +106,7 @@ public: HTTP2_INCREMENT_THREAD_DYN_STAT(HTTP2_STAT_CURRENT_CLIENT_STREAM_COUNT, _thread); _start_time = ink_hrtime();