Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.217.31
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
local /
go /
src /
cmd /
compile /
internal /
ssa /
[ HOME SHELL ]
Name
Size
Permission
Action
gen
[ DIR ]
drwxr-xr-x
testdata
[ DIR ]
drwxr-xr-x
README.md
7.76
KB
-rw-r--r--
TODO
950
B
-rw-r--r--
biasedsparsemap.go
2.71
KB
-rw-r--r--
block.go
8.64
KB
-rw-r--r--
branchelim.go
11.41
KB
-rw-r--r--
branchelim_test.go
5.21
KB
-rw-r--r--
cache.go
2.46
KB
-rw-r--r--
check.go
13.9
KB
-rw-r--r--
checkbce.go
956
B
-rw-r--r--
compile.go
16.22
KB
-rw-r--r--
config.go
11.39
KB
-rw-r--r--
copyelim.go
1.82
KB
-rw-r--r--
copyelim_test.go
1.29
KB
-rw-r--r--
critical.go
3.15
KB
-rw-r--r--
cse.go
10.62
KB
-rw-r--r--
cse_test.go
4.21
KB
-rw-r--r--
deadcode.go
9.73
KB
-rw-r--r--
deadcode_test.go
3.49
KB
-rw-r--r--
deadstore.go
8.98
KB
-rw-r--r--
deadstore_test.go
4.09
KB
-rw-r--r--
debug.go
33.92
KB
-rw-r--r--
debug_test.go
28.68
KB
-rw-r--r--
decompose.go
10.91
KB
-rw-r--r--
dom.go
7.98
KB
-rw-r--r--
dom_test.go
13.34
KB
-rw-r--r--
export_test.go
5.68
KB
-rw-r--r--
flagalloc.go
5.49
KB
-rw-r--r--
func.go
22.17
KB
-rw-r--r--
func_test.go
12.85
KB
-rw-r--r--
fuse.go
5.7
KB
-rw-r--r--
fuse_test.go
5.04
KB
-rw-r--r--
html.go
29.04
KB
-rw-r--r--
id.go
576
B
-rw-r--r--
layout.go
3.56
KB
-rw-r--r--
lca.go
3.71
KB
-rw-r--r--
lca_test.go
1.65
KB
-rw-r--r--
likelyadjust.go
15.23
KB
-rw-r--r--
location.go
2.8
KB
-rw-r--r--
loopbce.go
9.85
KB
-rw-r--r--
loopreschedchecks.go
15.36
KB
-rw-r--r--
looprotate.go
2.24
KB
-rw-r--r--
lower.go
1.24
KB
-rw-r--r--
magic.go
13.42
KB
-rw-r--r--
magic_test.go
9.1
KB
-rw-r--r--
nilcheck.go
11.11
KB
-rw-r--r--
nilcheck_test.go
12.07
KB
-rw-r--r--
numberlines.go
8.44
KB
-rw-r--r--
op.go
8.74
KB
-rw-r--r--
opGen.go
839.32
KB
-rw-r--r--
opt.go
290
B
-rw-r--r--
passbm_test.go
3.14
KB
-rw-r--r--
phielim.go
1.47
KB
-rw-r--r--
phiopt.go
3.96
KB
-rw-r--r--
poset.go
37.23
KB
-rw-r--r--
poset_test.go
18.14
KB
-rw-r--r--
print.go
2.98
KB
-rw-r--r--
prove.go
36.68
KB
-rw-r--r--
redblack32.go
8.9
KB
-rw-r--r--
redblack32_test.go
5.96
KB
-rw-r--r--
regalloc.go
76.36
KB
-rw-r--r--
regalloc_test.go
6.41
KB
-rw-r--r--
rewrite.go
33.06
KB
-rw-r--r--
rewrite386.go
514.14
KB
-rw-r--r--
rewrite386splitload.go
3.7
KB
-rw-r--r--
rewriteAMD64.go
1.31
MB
-rw-r--r--
rewriteAMD64splitload.go
4.95
KB
-rw-r--r--
rewriteARM.go
538.26
KB
-rw-r--r--
rewriteARM64.go
837.68
KB
-rw-r--r--
rewriteMIPS.go
203.31
KB
-rw-r--r--
rewriteMIPS64.go
227.84
KB
-rw-r--r--
rewritePPC64.go
661.88
KB
-rw-r--r--
rewriteRISCV64.go
123.11
KB
-rw-r--r--
rewriteS390X.go
904.36
KB
-rw-r--r--
rewriteWasm.go
136.86
KB
-rw-r--r--
rewrite_test.go
3.01
KB
-rw-r--r--
rewritedec.go
10.56
KB
-rw-r--r--
rewritedec64.go
64.01
KB
-rw-r--r--
rewritedecArgs.go
6.6
KB
-rw-r--r--
rewritegeneric.go
1.09
MB
-rw-r--r--
schedule.go
13.99
KB
-rw-r--r--
schedule_test.go
2.91
KB
-rw-r--r--
shift_test.go
4.05
KB
-rw-r--r--
shortcircuit.go
3.97
KB
-rw-r--r--
shortcircuit_test.go
1.31
KB
-rw-r--r--
sizeof_test.go
855
B
-rw-r--r--
softfloat.go
1.94
KB
-rw-r--r--
sparsemap.go
1.98
KB
-rw-r--r--
sparseset.go
1.54
KB
-rw-r--r--
sparsetree.go
7.88
KB
-rw-r--r--
sparsetreemap.go
7.67
KB
-rw-r--r--
stackalloc.go
10.95
KB
-rw-r--r--
stackframe.go
290
B
-rw-r--r--
stmtlines_test.go
2.75
KB
-rw-r--r--
tighten.go
4.21
KB
-rw-r--r--
trim.go
4.24
KB
-rw-r--r--
value.go
10.71
KB
-rw-r--r--
writebarrier.go
17.92
KB
-rw-r--r--
writebarrier_test.go
1.75
KB
-rw-r--r--
xposmap.go
3.29
KB
-rw-r--r--
zcse.go
2.12
KB
-rw-r--r--
zeroextension_test.go
1.66
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : sparsetree.go
// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package ssa import ( "fmt" "strings" ) type SparseTreeNode struct { child *Block sibling *Block parent *Block // Every block has 6 numbers associated with it: // entry-1, entry, entry+1, exit-1, and exit, exit+1. // entry and exit are conceptually the top of the block (phi functions) // entry+1 and exit-1 are conceptually the bottom of the block (ordinary defs) // entry-1 and exit+1 are conceptually "just before" the block (conditions flowing in) // // This simplifies life if we wish to query information about x // when x is both an input to and output of a block. entry, exit int32 } func (s *SparseTreeNode) String() string { return fmt.Sprintf("[%d,%d]", s.entry, s.exit) } func (s *SparseTreeNode) Entry() int32 { return s.entry } func (s *SparseTreeNode) Exit() int32 { return s.exit } const ( // When used to lookup up definitions in a sparse tree, // these adjustments to a block's entry (+adjust) and // exit (-adjust) numbers allow a distinction to be made // between assignments (typically branch-dependent // conditionals) occurring "before" the block (e.g., as inputs // to the block and its phi functions), "within" the block, // and "after" the block. AdjustBefore = -1 // defined before phi AdjustWithin = 0 // defined by phi AdjustAfter = 1 // defined within block ) // A SparseTree is a tree of Blocks. // It allows rapid ancestor queries, // such as whether one block dominates another. type SparseTree []SparseTreeNode // newSparseTree creates a SparseTree from a block-to-parent map (array indexed by Block.ID) func newSparseTree(f *Func, parentOf []*Block) SparseTree { t := make(SparseTree, f.NumBlocks()) for _, b := range f.Blocks { n := &t[b.ID] if p := parentOf[b.ID]; p != nil { n.parent = p n.sibling = t[p.ID].child t[p.ID].child = b } } t.numberBlock(f.Entry, 1) return t } // newSparseOrderedTree creates a SparseTree from a block-to-parent map (array indexed by Block.ID) // children will appear in the reverse of their order in reverseOrder // in particular, if reverseOrder is a dfs-reversePostOrder, then the root-to-children // walk of the tree will yield a pre-order. func newSparseOrderedTree(f *Func, parentOf, reverseOrder []*Block) SparseTree { t := make(SparseTree, f.NumBlocks()) for _, b := range reverseOrder { n := &t[b.ID] if p := parentOf[b.ID]; p != nil { n.parent = p n.sibling = t[p.ID].child t[p.ID].child = b } } t.numberBlock(f.Entry, 1) return t } // treestructure provides a string description of the dominator // tree and flow structure of block b and all blocks that it // dominates. func (t SparseTree) treestructure(b *Block) string { return t.treestructure1(b, 0) } func (t SparseTree) treestructure1(b *Block, i int) string { s := "\n" + strings.Repeat("\t", i) + b.String() + "->[" for i, e := range b.Succs { if i > 0 { s += "," } s += e.b.String() } s += "]" if c0 := t[b.ID].child; c0 != nil { s += "(" for c := c0; c != nil; c = t[c.ID].sibling { if c != c0 { s += " " } s += t.treestructure1(c, i+1) } s += ")" } return s } // numberBlock assigns entry and exit numbers for b and b's // children in an in-order walk from a gappy sequence, where n // is the first number not yet assigned or reserved. N should // be larger than zero. For each entry and exit number, the // values one larger and smaller are reserved to indicate // "strictly above" and "strictly below". numberBlock returns // the smallest number not yet assigned or reserved (i.e., the // exit number of the last block visited, plus two, because // last.exit+1 is a reserved value.) // // examples: // // single node tree Root, call with n=1 // entry=2 Root exit=5; returns 7 // // two node tree, Root->Child, call with n=1 // entry=2 Root exit=11; returns 13 // entry=5 Child exit=8 // // three node tree, Root->(Left, Right), call with n=1 // entry=2 Root exit=17; returns 19 // entry=5 Left exit=8; entry=11 Right exit=14 // // This is the in-order sequence of assigned and reserved numbers // for the last example: // root left left right right root // 1 2e 3 | 4 5e 6 | 7 8x 9 | 10 11e 12 | 13 14x 15 | 16 17x 18 func (t SparseTree) numberBlock(b *Block, n int32) int32 { // reserve n for entry-1, assign n+1 to entry n++ t[b.ID].entry = n // reserve n+1 for entry+1, n+2 is next free number n += 2 for c := t[b.ID].child; c != nil; c = t[c.ID].sibling { n = t.numberBlock(c, n) // preserves n = next free number } // reserve n for exit-1, assign n+1 to exit n++ t[b.ID].exit = n // reserve n+1 for exit+1, n+2 is next free number, returned. return n + 2 } // Sibling returns a sibling of x in the dominator tree (i.e., // a node with the same immediate dominator) or nil if there // are no remaining siblings in the arbitrary but repeatable // order chosen. Because the Child-Sibling order is used // to assign entry and exit numbers in the treewalk, those // numbers are also consistent with this order (i.e., // Sibling(x) has entry number larger than x's exit number). func (t SparseTree) Sibling(x *Block) *Block { return t[x.ID].sibling } // Child returns a child of x in the dominator tree, or // nil if there are none. The choice of first child is // arbitrary but repeatable. func (t SparseTree) Child(x *Block) *Block { return t[x.ID].child } // isAncestorEq reports whether x is an ancestor of or equal to y. func (t SparseTree) IsAncestorEq(x, y *Block) bool { if x == y { return true } xx := &t[x.ID] yy := &t[y.ID] return xx.entry <= yy.entry && yy.exit <= xx.exit } // isAncestor reports whether x is a strict ancestor of y. func (t SparseTree) isAncestor(x, y *Block) bool { if x == y { return false } xx := &t[x.ID] yy := &t[y.ID] return xx.entry < yy.entry && yy.exit < xx.exit } // domorder returns a value for dominator-oriented sorting. // Block domination does not provide a total ordering, // but domorder two has useful properties. // (1) If domorder(x) > domorder(y) then x does not dominate y. // (2) If domorder(x) < domorder(y) and domorder(y) < domorder(z) and x does not dominate y, // then x does not dominate z. // Property (1) means that blocks sorted by domorder always have a maximal dominant block first. // Property (2) allows searches for dominated blocks to exit early. func (t SparseTree) domorder(x *Block) int32 { // Here is an argument that entry(x) provides the properties documented above. // // Entry and exit values are assigned in a depth-first dominator tree walk. // For all blocks x and y, one of the following holds: // // (x-dom-y) x dominates y => entry(x) < entry(y) < exit(y) < exit(x) // (y-dom-x) y dominates x => entry(y) < entry(x) < exit(x) < exit(y) // (x-then-y) neither x nor y dominates the other and x walked before y => entry(x) < exit(x) < entry(y) < exit(y) // (y-then-x) neither x nor y dominates the other and y walked before y => entry(y) < exit(y) < entry(x) < exit(x) // // entry(x) > entry(y) eliminates case x-dom-y. This provides property (1) above. // // For property (2), assume entry(x) < entry(y) and entry(y) < entry(z) and x does not dominate y. // entry(x) < entry(y) allows cases x-dom-y and x-then-y. // But by supposition, x does not dominate y. So we have x-then-y. // // For contradiction, assume x dominates z. // Then entry(x) < entry(z) < exit(z) < exit(x). // But we know x-then-y, so entry(x) < exit(x) < entry(y) < exit(y). // Combining those, entry(x) < entry(z) < exit(z) < exit(x) < entry(y) < exit(y). // By supposition, entry(y) < entry(z), which allows cases y-dom-z and y-then-z. // y-dom-z requires entry(y) < entry(z), but we have entry(z) < entry(y). // y-then-z requires exit(y) < entry(z), but we have entry(z) < exit(y). // We have a contradiction, so x does not dominate z, as required. return t[x.ID].entry }
Close